Vediamo in questa breve guida come poter creare un database e assegnare specifici permessi ad un utente utilizzando esclusivamente la command line. Si presume che i pre-requisiti di partenza siano quelli di lavorare in un server Linux (nel caso specifico faccio riferimento ad una distribuzione Ubuntu) e di avere un server MySQL installato e configurato.
Nel caso di Ubuntu o Debian è questione di due righe:
sudo apt-get update
sudo apt-get install mysql-server
Durante l’installazione dei pacchetti vi verrà richiesta una password per il super-amministratore root. Quindi la sfruttiamo subito dato che è necessario autenticarsi proprio come utente Root di MySQL:
mysql -u root -p
vi verrà chiesta ovviamente la password, e successivamente otterrete la sub-shell di MySQL. Facciamo il caso di voler creare l’utente “asdrubale“
CREATE USER 'asdrubale'@'localhost' IDENTIFIED BY 'AsdrubaleTheBest';
E’ molto importante utilizzare le maiuscole nei comandi. Non è obbligatorio ma consiglio di utilizzarle così come le vedete scritte qui sopra. Alcune considerazioni; il primo “asdrubale” è di fatto il nome utente che utilizzeremo poi per loggarsi, mentre “AsdrubaleTheBest” è la password assegnata a questo utente. Nel paragrafo successivo vediamo come (ri)assegnare la password, o modificarla.
Fate attenzione agli apici che vanno rispettati anch’essi. “localhost” si riferisce al server MySQL, in questo caso si tratta di un server ospitato nella medesima macchina dove ci siamo collegati via ssh. Nel caso si tratti di un server remoto occorre mettere l’IP o il nome DNS.
Dicevamo della password. Il comando seguente va bene per assegnare la password la prima volta, o sovrascrivere la password
set password for 'asdrubale'@'localhost' = 'metti-qui-la-password';
Tornando alla creazione dell’utente. Per verificare che sia andato tutto bene possiamo chiedere la lista degli utenti registrati:
SELECT User,Host FROM mysql.user;
+------------------+-------------------+
| User | Host |
+------------------+-------------------+
| root | 127.0.0.1 |
| root | ::1 |
| root | localhost |
| asdrubale | localhost |
+------------------+-------------------+
4 rows in set (0.00 sec)
La lista formattata che vi verrà ritornata dovrà contenere il nostro “asdrubale“.
Ora passiamo direttamente a creare il database dove il nostro nuovo utente potrà scrivere. Il database si chiamerà “metauro“
CREATE DATABASE metauro;
niente di più semplice, come nell’esempio precedente non dimenticatevi il punto e virgola di chiusura. Ora, giusto per sicurezza, vediamo se il nuovo db è stato creato:
SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| metauro |
+--------------------+
4 rows in set (0.00 sec)
L’elenco formattato dovrà riportare quello appena creato.
Possiamo passare a fornire i permessi necessari ad “asdrubale” affinché possa operare sul db “metauro“.
GRANT ALL ON metauro.* TO 'asdrubale'@'localhost';
Dopo GRANT è presente ALL, che di fatto è un comando. Nella maggioranza dei casi quando diamo accesso è proprio di questo tipo. Significa che l’utente in questione è di fatto l’amministratore per questo database.
Altri tipi di comando sono alternativi a ALL sono:
- CREATE : permette di creare il database e le tavole.
- UPDATE : permette di aggiornare i dati delle righe di una tavola.
- INSERT : permette di inserire dati nelle righe delle tavole.
- SELECT : permette di leggere i dati nelle righe delle tavole.
- DELETE : permette di cancellare i dati dalle righe di una tavole.
- DROP : permette di cancellare le tavole, le righe e il database intero.
- EXECUTE : permette di eseguire comandi.
- GRANT OPTION : permette di concedere i permessi di accesso ad un altro utente.
- SHOW DATABASES : permette di vedere la lista dei database.
Possiamo concludere le operazioni, rinfrescando i permessi. Non è del tutto necessario, ma è buona norma farlo:
FLUSH PRIVILEGES;
Per avere una controprova, possiamo verificare con questo comando la riuscita delle operazioni:
SHOW GRANTS FOR 'adrubale'@'localhost';
+-------------------------------------------------------------------------------------------------------------------+
| Grants for asdrubale@localhost |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'asdrubale'@'localhost' IDENTIFIED BY PASSWORD '*..cut' |
| GRANT ALL PRIVILEGES ON 'metauro'.* TO 'asdrubale'@'localhost' |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
In definitiva abbiamo visto come sia semplice creare un database ed un utente con un solo accesso SSH senza strumenti esterni.
Carlo
Finalmente una guida semplice, spiegata bene ed estremamente pratica che ha funzionato al primo colpo.
Grazie!
Walter Tosolini
Grazie