¿Cómo conocer a todos los usuarios que pueden acceder a una base de datos (MySQL)?

19

¿Cómo conocer a todos los usuarios que pueden acceder a una base de datos?

usuario79483
fuente

Respuestas:

14

Conéctese a la instancia de mysql como usuario administrador (generalmente como root) y dé el siguiente comando ...

select user from mysql.db where db='DB_NAME';
usuario79644
fuente
Acabo de ejecutar esto contra un MariaDB en vivo (bifurcación MySQL) y devolvió 2 filas en blanco.
Chris S
1
¿Cuál es el nombre de su base de datos? debe reemplazar "DB_NAME" por el nombre de su base de datos.
user79644
La ejecución select user from mysql.dbsin calificación devuelve 2 filas en blanco también.
Chris S
No estoy seguro de cuáles son las diferencias entre MariaDB y MySQL, pero esa consulta se ejecuta como se esperaba en una instalación estándar de MySQL 5.
rvf
Esto es solo una parte de la respuesta al OP. El campo mysql.user.db puede contener caracteres comodín que coinciden con varias bases de datos. el uso de su consulta propuesta los pierde. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514
10

La respuesta de user79644 les otorga a los usuarios privilegios a nivel de base de datos, pero los extrañará solo con privilegios a nivel de tabla, columna o procedimiento. Para encontrarlos todos, use las siguientes declaraciones:

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';

Al menos en MySQL 5.5, parece que tener privilegios a nivel de columna implica que tiene privilegios a nivel de tabla. Tener privilegios a nivel de tabla no implica que tenga privilegios a nivel de base de datos. No estoy seguro acerca de los privilegios a nivel de procedimiento.

Scott Duckworth
fuente
1
Esto es solo una parte de la respuesta. El campo mysql.user.db puede contener caracteres comodín que coinciden con varias bases de datos. el uso de su consulta propuesta los pierde. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514
¿Qué base de datos? Estoy obteniendoERROR 1046 (3D000): No database selected
user124384
@ user124384 Lo que no se dice en la respuesta es que debería usar la mysqlbase de datos. Ahí es donde se almacenan todos los datos utilizados por MySQL. Dé el comando USE mysql;de agregar el nombre de la base de datos a los nombres de la tabla, como 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;
silviud
fuente
2
mostrar subvenciones muestra solo las subvenciones del usuario actual (conectado)
nl-x
como root también puedes mostrar subvenciones para
Rowan Hawkins
2

Debe tener en cuenta que MySQLGRANT para bases de datos puede contener caracteres comodín . Esto debe tenerse en cuenta mediante el uso LIKEen la consulta:

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';
usuario4514
fuente