Introduzione

Esistono comandi per mostrare database e tabelle, ma non esiste un comando show users MySQL.

Questo tutorial spiega come elencare tutti gli account utente in un server di database MySQL attraverso la riga di comando. Ti mostreremo anche come scoprire quali utenti hanno accesso a un determinato database.

Prima di iniziare

Partiamo dal presupposto che sul tuo sistema sia già installato un server MySQL o MariaDB.

Tutti i comandi vengono eseguiti all'interno della shell MySQL come utente root. Per accedere alla shell MySQL digitare il comando seguente e inserire la password dell'utente root di MySQL quando richiesto:

mysql -u root -p

Se non hai impostato una password per il tuo utente root MySQL, puoi omettere l'opzione -p.

Se hai dimenticato la password di root di MySQL, puoi reimpostarla seguendo queste istruzioni.

Mostrare tutti gli utenti MySQL

MySQL memorizza le informazioni sugli utenti in una tabella denominata user nel database mysql.

Per ottenere un elenco di tutti gli account utente MySQL, utilizzare l'istruzione SELECT per recuperare tutte le righe dalla tabella mysql.users:

SELECT User, Host FROM mysql.user;

L'output dovrebbe essere simile al seguente:

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root              | localhost |
| user1             | %         |
| user2             | %         |
| user3             | 10.10.0.6 |
| user4             | 10.10.0.9 |
| user5             | localhost |
| user6             | localhost |
| user7             | localhost |
+------------------+-----------+
8 rows in set (0.00 sec)

Il comando sopra mostra soltanto due colonne della tabella mysql.user ( User e Host), Questa tabella contiene più di 40 colonne come Password, Select_priv, Update_priv, etc.

Un account utente in MySQL è composto da due parti: un nome utente e un nome host.

Utilizzare l'istruzione desc mysql.user; per visualizzare informazioni sulle colonne della tabella. Una volta che conosci il nome della colonna, puoi eseguire una query su un dato selezionato.

Ad esempio, per ottenere un elenco di tutti gli account degli utenti MySQL, comprese le informazioni sulla password e se è attiva o scaduta, utilizzare la seguente query:

SELECT User, Host, Password, password_expired FROM mysql.user;
+----------------+-----------+-------------------------------------------+------------------+
| User           | Host      | Password                                  | password_expired |
+----------------+-----------+-------------------------------------------+------------------+
| root             | localhost |                                           | N                    |
| user1            | %         | *ADC3B5B27617732CD6320A2DA976258E149A7EC8 | N                    |
| user2            | %         | *9550E004046348198A143A115550E1262209FB6F | N                    |
| user3            | 10.10.0.6 | *F91C86B486B945C083B61A05FF6E197560D187EC | Y                    |
| user4            | 10.10.0.9 |                                           | Y                    |
| user5            | localhost | *17F2B1E48029294841AD66772BEBB7E6E6A005AF | N                	  |
| user6            | localhost | *74409C8DB55AC1A6829D801915981C46EDBFC64A | N                    |
| user7            | localhost | *7B3022FCAEC3534CE67C68322D8AF0C240D95745 | N                    |
+----------------+-----------+-------------------------------------------+------------------+
8 rows in set (0.00 sec)

Mostrare agli utenti che hanno accesso a un database particolare

Le informazioni sui privilegi a livello di database sono archiviate nella tabella mysql.db.

È possibile eseguire una query sulla tabella per scoprire quali utenti hanno accesso a un determinato database e il livello dei privilegi.

Ad esempio, per ottenere un elenco di tutti gli utenti che dispongono di un livello di accesso al database denominato db_name è necessario utilizzare la seguente query:

SELECT * FROM mysql.db WHERE Db = 'db_name'\G;
*************************** 1. row ***************************
                 Host: localhost
                   Db: db_name
                 User: db_user
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
           Grant_priv: N
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: Y
         Execute_priv: Y
           Event_priv: Y
         Trigger_priv: Y
1 row in set (0.00 sec)

Per recuperare informazioni solo sugli account utente che hanno accesso a un determinato database, senza visualizzare i privilegi utilizzare:

SELECT db, host, user FROM mysql.db WHERE db = 'db_name'
+---------+-----------+---------+
| db      | host      | user    |
+---------+-----------+---------+
| db_name | localhost | db_user |
+---------+-----------+---------+

La seguente query ti mostrerà informazioni su tutti i database e gli utenti associati:

SELECT db, host, user FROM mysql.db WHERE db = 'db_name'
+------------------+-----------+-----------+
| db               | host      | user      |
+------------------+-----------+-----------+
| db_name          | localhost | db_user   |
| wordpress        | localhost | user1     |
| magento          | localhost | user2     |
| noviello         | localhost | user3     |
+------------------+-----------+-----------+

Conclusione

In questo tutorial, abbiamo mostrato come ottenere un elenco di tutti gli utenti MySQL e scoprire quali utenti hanno accesso a un determinato database.