Introduzione

MySQL è il più popolare sistema di gestione di database relazionali open source. Il server MySQL ci consente di creare numerosi utenti e database e concedere i privilegi appropriati in modo che gli utenti possano accedere e gestire i database.

Questo tutorial spiega come utilizzare la riga di comando per creare e gestire database e utenti MySQL o MariaDB.

Prerequisiti

Prima di iniziare con questa esercitazione, supponiamo che sul tuo sistema sia già installato un server MySQL o MariaDB. Tutti i comandi verranno eseguiti come utente root.

Per aprire il prompt di MySQL, digitare il comando seguente e inserire la password dell'utente root di MySQL quando richiesto:

mysql -u root -p

Creare un nuovo database MySQL

Per creare un nuovo database MySQL, eseguire il comando seguente, è sufficiente sostituire database_name con il nome del database che si desidera creare:

CREATE DATABASE database_name;
Query OK, 1 row affected (0.00 sec)

Se si tenta di creare un database già esistente, verrà visualizzato il seguente messaggio di errore:

ERROR 1007 (HY000): Can't create database 'database_name'; database exists

Per evitare errori se esiste il database con lo stesso nome che si sta tentando di creare, è possibile utilizzare il comando seguente:

CREATE DATABASE IF NOT EXISTS database_name;
Query OK, 1 row affected, 1 warning (0.00 sec)

Nell'output sopra, Query OK indica che la query ha avuto esito positivo e 1 warning indica che il database esiste già e che non è stato creato alcun nuovo database.

Elencare tutti i database MySQL

Puoi elencare tutti i database esistenti sul nostro server MySQL o MariaDB con il seguente comando:

SHOW DATABASES;

L'output sarà simile al seguente:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| database_name      |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

I database information_schema, mysql, performance_schema, e sys vengono creati al momento dell'installazione e sono la memorizzazione di informazioni su tutti gli altri database, la configurazione del sistema, utenti, autorizzazioni e altri dati importanti. Questi database sono necessari per la corretta funzionalità dell'installazione di MySQL.

Eliminare un database MySQL

L'eliminazione di un database MySQL è semplice come l'esecuzione di un singolo comando. Questa è un'azione non reversibile e deve essere eseguita con cautela. Assicurarsi di non rimuovere un database errato, poiché una volta eliminato il database non può essere recuperato.

Per eliminare un MySQL o MariaDB, eseguire il comando seguente:

DROP DATABASE database_name;
Query OK, 0 rows affected (0.00 sec)

Se si tenta di eliminare un database che non esiste, verrà visualizzato il seguente messaggio di errore:

ERROR 1008 (HY000): Can't drop database 'database_name'; database doesn't exist

Per evitare questo errore puoi usare il seguente comando:

DROP DATABASE IF EXISTS database_name;

Creare un nuovo account utente MySQL

Un account utente in MySQL è costituito da un nome utente e parti dell'hostname.

Per creare un nuovo account utente MySQL eseguire il comando seguente, basta sostituire database_user con il nome dell'utente che si desidera creare:

CREATE USER 'database_user'@'localhost' IDENTIFIED BY 'user_password';

Nel comando sopra abbiamo impostato la parte hostname su localhost che significa che questo utente sarà in grado di connettersi al server MySQL solo dall'host locale (cioè dal sistema in cui è in esecuzione MySQL Server). Se si desidera concedere l'accesso da un altro host (s) modificare semplicemente localhost con l'IP della macchina remota o utilizzare il '%'carattere jolly per la parte host, il che significa che l'account utente sarà in grado di connettersi da qualsiasi host.

Come quando si lavora con i database per evitare un errore quando si tenta di creare un account utente già esistente, è possibile utilizzare:

CREATE USER IF NOT EXISTS 'database_user'@'localhost' IDENTIFIED BY 'user_password';
Query OK, 0 rows affected, 1 warning (0.00 sec)

Cambiare la password di un account utente MySQL

La sintassi per modificare una password dell'account utente MySQL o MariaDB dipende dalla versione del server in esecuzione sul sistema.

Puoi trovare la versione del tuo server con il seguente comando:

mysql --version

Se si dispone di MySQL 5.7.6 e versioni successive o MariaDB 10.1.20 e versioni successive, per modificare la password utilizzare il comando seguente:

ALTER USER 'database_user'@'localhost' IDENTIFIED BY 'new_password';

Se hai MySQL 5.7.5 e versioni precedenti o MariaDB 10.1.20 e versioni precedenti, utilizza:

SET PASSWORD FOR 'database_user'@'localhost' = PASSWORD('new_password');

In entrambi i casi, l'output dovrebbe essere simile al seguente:

Query OK, 0 rows affected (0.00 sec)

Elencare tutti gli account utente MySQL

Possiamo elencare tutti gli account utente MySQL o MariaDB interrogando la tabella mysql.users:

SELECT user, host FROM mysql.user;

L'output dovrebbe essere simile al seguente:

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| database_user    | %         |
| database_user    | localhost |
| debian-sys-maint | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

Eliminare l'account utente MySQL

Per eliminare un account utente, utilizzare il comando seguente:

DROP USER '[email protected]'localhost';

Se si tenta di eliminare un account utente che non esiste, si verificherà un errore.

ERROR 1396 (HY000): Operation DROP USER failed for 'database_user'@'localhost'

Come quando si lavora con i database per evitare l'errore, è possibile utilizzare:

DROP USER IF EXISTS 'database_user'@'localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)

Concedere le autorizzazioni a un account utente MySQL

Esistono più tipi di privilegi che possono essere concessi a un account utente. In questa guida esamineremo diversi esempi:

Per assegnare tutti i privilegi a un account utente su un database specifico, utilizzare il comando seguente:

GRANT ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';

Per assegnare tutti i privilegi a un account utente su tutti i database, utilizzare il comando seguente:

GRANT ALL PRIVILEGES ON *.* TO 'database_user'@'localhost';

Per assegnare tutti i privilegi a un account utente su una tabella specifica da un database, utilizzare il comando seguente:

GRANT ALL PRIVILEGES ON database_name.table_name TO 'database_user'@'localhost';

Se si desidera concedere solo privilegi specifici a un account utente su un tipo di database specifico:

GRANT SELECT, INSERT, DELETE ON database_name.* TO [email protected]'localhost';

Revocare le autorizzazioni da un account utente MySQL

Se è necessario revocare uno o più privilegi o tutti i privilegi da un account utente, la sintassi è quasi identica a concederlo. Ad esempio, se si desidera revocare tutti i privilegi da un account utente su un database specifico, utilizzare il comando seguente:

REVOKE ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';

Visualizza i privilegi dell'account utente MySQL

Per trovare i privilegi concessi a uno specifico tipo di account utente MySQL:

SHOW GRANTS FOR 'database_user'@'localhost';
+---------------------------------------------------------------------------+
| Grants for [email protected]                                        |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'database_user'@'localhost'                         |
| GRANT ALL PRIVILEGES ON `database_name`.* TO 'database_user'@'localhost'  |
+---------------------------------------------------------------------------+
2 rows in set (0.00 sec)

Conclusione

Questo tutorial copre solo le basi, ma dovrebbe essere un buon inizio per chiunque voglia imparare a gestire database e utenti MySQL dalla riga di comando. Puoi anche controllare il tutorial su come reimpostare una password di root di MySQL nel caso in cui l'hai dimenticata.