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 hostname.
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.