Comment savoir tous les utilisateurs qui peuvent accéder à une base de données?
Réponses
Trop de publicités?La réponse de l'utilisateur79644 obtient les utilisateurs avec des privilèges au niveau de la base de données mais ne tiendra pas compte des utilisateurs ayant uniquement des privilèges au niveau des tables, des colonnes ou des procédures. Pour les trouver tous, utilisez les déclarations 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 avez des privilèges au niveau des tables. Avoir des privilèges au niveau des tables n'implique pas que vous avez des privilèges au niveau de la base de données. Pas sûr des privilèges au niveau des procédures.
# utilisateurs actuels qui accèdent à la base de données
mysql> show processlist;
+-----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------+------+---------+------+-------+------------------+
| 214 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+-----+------+-----------+------+---------+------+-------+------------------+
# qui peut accéder à quoi à tout moment et son niveau de privilège
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
# quels privilèges sont disponibles
mysql> show privileges;
Vous devez garder à l'esprit que le MySQL GRANT
pour les bases de données peut contenir des caractères génériques. Cela doit être pris en compte en utilisant LIKE
dans la requête :
SELECT utilisateur,hôte FROM db WHERE 'nom' LIKE db;
SELECT utilisateur,hôte FROM tables_priv WHERE db='nom';
SELECT utilisateur,hôte FROM columns_priv WHERE db='nom';
SELECT utilisateur,hôte FROM procs_priv WHERE db='nom';