Questa breve guida si è resa necessaria perché troppe sono le strade alternative (e confuse...) per installare un database MariaDB su Debian 9 e derivate, Raspbian inclusa. La ragione deriva dalla presenza di molti tutorial che mischiano vecchio e nuovo, spesso arrivando a grossi problemi di usabilità o sicurezza.
Come al solito tutto quanto qui riportato usa solo repository ufficiali Debian nella versione stabile.
L'installazione è assolutamente standard:
root@server1:~# aptitude install mysql-server
L'unica attenzione riguarda il fatto che questo comando... non installa un server MySQL, ma un server MariaDB. Ovviamente non ci sono problemi di compatibilità.
La prima cosa che sorprende chi ha già usato MySQL è l'accesso senza password.
root@server1:~# mysql
Ovviamente il meccanismo è sicuro in quanto l'utente root per eseguire il comando deve essersi precedentemente autenticato: la verifica passa attraverso una socket Unix. Se si lavora in locale è una cosa particolarmente comoda ed anche sicura.
Sconsiglio vivamente di disattivare globalmente questo meccanismo come descritto in molti tutorial: si rischiano infatti grossi problemi di compatibilità, ora e soprattutto in futuro.
I nuovi utenti possono essere creati sia appoggiandosi su utenti di sistema (che devono già esistere), sia usando il metodo "tradizionale" con utenti gestiti direttamente dal database, più comodo per accessi remoti.
Per creare un utente MySQL:
Per accedere occorre specificare la password solo nel secondo caso:
Alcuni comandi utili, alcuni da usare come root:
Vedere i propri permessi:
MariaDB [(none)]> SHOW GRANTS;
+----------------------------------------------------------------------+
| Grants for root@localhost |
+----------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA
unix_socket WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION |
+----------------------------------------------------------------------+
Vedere i permessi di user e user1 (praticamente nulla...)
MariaDB [(none)]> SHOW GRANTS FOR user@localhost;
+---------------------------------------------------------------------+
| Grants for user@localhost
|
+---------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user'@'localhost' IDENTIFIED VIA unix_socket |
+---------------------------------------------------------------------+
MariaDB [(none)]> SHOW GRANTS FOR user1;
+---------------------------------------------------------------------+
| Grants for user1@%
|
+---------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'%' IDENTIFIED BY PASSWORD
'*66816D0' |
+---------------------------------------------------------------------+
Vedere tutti gli utenti
MariaDB [(none)]> SELECT User FROM mysql.user;
+-------+
| User |
+-------+
| user1 |
| root |
| user |
+-------+
phpMyAdmin
Non è certo indispensabile, ma a volte potrebbe essere comodo...
root@server1:~# aptitude install phpmyadmin
Sono installate anche le dipendenza (il server web in particolare) e creato automaticamente un nuovo utente phpmyadmin:
MariaDB [(none)]> SHOW GRANTS FOR phpmyadmin@localhost;
+--------------------------------------------------------------------------------+
| Grants for phpmyadmin@localhost |
+--------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'phpmyadmin'@'localhost' IDENTIFIED BY PASSWORD
'*DC529' |
| GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO 'phpmyadmin'@'localhost' |
+--------------------------------------------------------------------------------+
ATTENZIONE: le credenziali viaggiano in chiaro e quindi questo meccanismo è utilizzabile solo se si dispone di un server web https, oppure si stanno facendo esperimenti su una LAN "sicura".
Dare "pieni poteri" ad un utente
Nell'esempio viene promosso phpmyadmin, per permettere la creazione di altri utenti e di database (root non è utilizzabile in phpMyAdmin, ed è bene che non lo sia).
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'%'
WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
L'immagine seguente mostra la creazione dell'utente vv (con password) e del corrispondente database vv (generato in contemporanea all'utente e su cui questi ha pieni diritti) contente la tabella TabellaTest con i campi numero e stringa.
Alcuni degli esempi seguenti faranno uso di tali impostazioni.
Accesso da remoto
ATTENZIONE: le credenziali viaggiano in chiaro e quindi questo meccanismo è utilizzabile solo se si dispone di una connessione cifrata, per esempio un tunnel ssh, oppure si stanno facendo esperimenti su una LAN "sicura".
Nell'installazione di default del server non è possibile accedere al database da remoto. Se serve, occorre commentare una riga nel file di configurazione per ascoltare su tutti gli IP (oppure modificarla per adattarla alla propria configurazione):
root@server1:~# nano /etc/mysql/mariadb.conf.d/50-server.cnf
(o file simile)
...
#bind-address = 127.0.0.1
root@server1:~# systemctl restart mysql.service
Esempio di accesso da una macchina remota (l'utente vv ed il database sono quelli descritti più sopra):
pi@rpi:~/my $ mysql -u vv -p -h server1.local
...
MariaDB [(none)]> use vv
...
MariaDB [vv]> INSERT INTO `TabellaTest`(`numero`, `stringa`) VALUES
(1234,"Funziona!");
Query OK, 1 row affected (0.00 sec)
Per scrivere codice C
Il seguente esempio non è certo un buon esempio, ma solo un test veloce. In particolare mancano i controlli di eventuali errori dopo ogni singola funzione che usa il database, sempre vivamente consigliati.
Il contesto è lo stesso precedente, sempre da macchina remota.
pi@rpi:~ $ sudo aptitude install libmariadb-dev-compat
pi@rpi:~/my $ nano testMySQL.c
#include <mariadb/mysql.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#define SERVER "server1.local"
#define USER "vv"
#define PASSWORD "vv"
int main(int argc, char **argv)
{MYSQL *con;
con = mysql_init(NULL);
mysql_real_connect(con, SERVER, USER, PASSWORD, NULL, 0, NULL, 0);
mysql_query(con, "use vv");
mysql_query(con, " INSERT INTO `TabellaTest`(`numero`, `stringa`) VALUES
(4567,\"Anche questo funziona!\")");
mysql_close(con);
exit(0);
}
pi@rpi:~/my $ gcc `mysql_config --cflags --libs` testMySQL.c -o testMySQL
pi@rpi:~/my $ ./testMySQL
Se volete usare NetBeans, leggete al termine della pagina Usare NetBeans.
Parole chiave: Debian - Stretch . Raspbian – MariaDB - MySQL - phpMyAdmin - C
Data di creazione di questa pagina: maggio 2018
Ultima modifica: 24 maggio 2018
Il taccuino tecnico - Permanentemente in fase di
riscrittura
Copyright 2013-2024, Vincenzo Villa (https://www.vincenzov.net)
Quest'opera è stata rilasciata con licenza Creative Commons | Attribuzione 4.0 Internazionale (CC BY 4.0)