Comment connaître tous les utilisateurs pouvant accéder à une base de données (MySQL)?

19

Comment connaître tous les utilisateurs pouvant accéder à une base de données?

user79483
la source

Réponses:

14

Connectez-vous à l'instance mysql en tant qu'utilisateur administrateur (généralement en tant que root) et donnez la commande suivante ...

select user from mysql.db where db='DB_NAME';
user79644
la source
Je viens de l'exécuter contre un MariaDB en direct (MySQL fork) et il a renvoyé 2 lignes vides.
Chris S
1
Quel est le nom de votre base de données? vous devez remplacer "DB_NAME" par le nom de votre base de données.
user79644
L'exécution select user from mysql.dbsans qualification renvoie également 2 lignes vides.
Chris S
Je ne sais pas quelles sont les différences entre MariaDB et MySQL, mais cette requête s'exécute comme prévu sur une installation standard de MySQL 5.
rvf
Ce n'est qu'une partie de la réponse au PO. Le champ mysql.user.db peut contenir des caractères génériques qui correspondent à plusieurs bases de données. en utilisant votre requête proposée les manque. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514
10

La réponse de user79644 obtient les utilisateurs avec des privilèges au niveau de la base de données, mais les utilisateurs ne disposant que des privilèges au niveau de la table, de la colonne ou de la procédure manqueront. Pour les trouver tous, utilisez les instructions suivantes:

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

Dans MySQL 5.5 au moins, il semble que le fait d'avoir des privilèges au niveau des colonnes implique que vous ayez des privilèges au niveau des tables. Avoir des privilèges au niveau de la table n'implique pas que vous ayez des privilèges au niveau de la base de données. Pas sûr des privilèges au niveau de la procédure.

Scott Duckworth
la source
1
Ce n'est qu'une partie de la réponse. Le champ mysql.user.db peut contenir des caractères génériques qui correspondent à plusieurs bases de données. en utilisant votre requête proposée les manque. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514
Quelle base de données? Je reçoisERROR 1046 (3D000): No database selected
user124384
@ user124384 Ce qui n'est pas dit dans la réponse, c'est que vous devez utiliser la mysqlbase de données. C'est là que toutes les données utilisées par MySQL sont stockées. Soit donner la commande USE mysql;d'ajouter le nom de la base de données aux noms de table, comme FROM mysql.dbouFROM 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
la source
2
affiche les autorisations affiche uniquement les autorisations de l'utilisateur actuel (connecté)
nl-x
en tant que root, vous pouvez également afficher les subventions pour
Rowan Hawkins
2

Vous devez garder à l'esprit que MySQLGRANT pour les bases de données peut contenir des caractères génériques . Cela doit être pris en compte en utilisant LIKEdans la requête:

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';
user4514
la source