Come conoscere tutti gli utenti che possono accedere a un database (MySQL)?


19

Come conoscere tutti gli utenti che possono accedere a un database?

Risposte:


14

Connettiti all'istanza mysql come utente amministratore (generalmente come root) e dai il seguente comando ...

select user from mysql.db where db='DB_NAME';

Ho appena eseguito questo contro un live MariaDB (fork di MySQL) e ha restituito 2 righe vuote.
Chris S,

1
Qual è il nome del tuo database? devi sostituire "DB_NAME" con il nome del tuo db.
user79644,

L'esecuzione select user from mysql.dbsenza qualifica restituisce anche 2 righe vuote.
Chris S,

Non sono sicuro di quali siano le differenze tra MariaDB e MySQL, ma quella query viene eseguita come previsto su un'installazione standard di MySQL 5.
rvf,

Questa è solo una parte della risposta al PO. Il campo mysql.user.db può contenere caratteri jolly che corrispondono a più database. usando la tua proposta non li trovi. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514

10

La risposta di user79644 ottiene agli utenti i privilegi a livello di database ma mancherà agli utenti solo privilegi a livello di tabella, a livello di colonna o a livello di procedura. Per trovarli tutti, utilizzare le seguenti dichiarazioni:

SELECT user,host FROM db WHERE db='name';
SELECT user,host FROM tables_priv WHERE db='name';
SELECT user,host FROM columns_priv WHERE db='name';
SELECT user,host FROM procs_priv WHERE db='name';

Almeno in MySQL 5.5, sembra che avere privilegi a livello di colonna implichi che si disponga di privilegi a livello di tabella. Avere i privilegi a livello di tabella non implica che si disponga di privilegi a livello di database. Non sono sicuro dei privilegi a livello di procedura.


1
Questa è solo una parte della risposta. Il campo mysql.user.db può contenere caratteri jolly che corrispondono a più database. usando la tua proposta non li trovi. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514

Quale database? RicevoERROR 1046 (3D000): No database selected
user124384 il

@ user124384 Quello che non è stato detto nella risposta è che dovresti usare il mysqldatabase. Ecco dove sono archiviati tutti i dati utilizzati da MySQL. O dare il comando USE mysql;di aggiungere il nome del database ai nomi delle tabelle, come FROM mysql.dboFROM mysql.tables_priv
Gypsy Spellweaver

8
# current users that access the db
mysql> show processlist;
+-----+------+-----------+------+---------+------+-------+------------------+
| Id  | User | Host      | db   | Command | Time | State | Info             |
+-----+------+-----------+------+---------+------+-------+------------------+
| 214 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
+-----+------+-----------+------+---------+------+-------+------------------+

# who can access what at anytime and his privilege level
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+

# what privileges are available
mysql> show privileges;

2
show grants mostra solo i contributi dell'utente corrente (connesso)
nl-x

come root puoi anche fare concessioni per
Rowan Hawkins il

2

Devi tenere presente che MySQLGRANT per i database può contenere caratteri jolly . Questo deve essere preso in considerazione usando LIKEnella query:

SELECT user,host FROM db WHERE 'name' LIKE db;
SELECT user,host FROM tables_priv WHERE db='name';
SELECT user,host FROM columns_priv WHERE db='name';
SELECT user,host FROM procs_priv WHERE db='name';
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.