Comment connaître tous les utilisateurs pouvant accéder à une base de données?
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';
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.
# 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;
Vous devez garder à l'esprit que MySQL GRANT
pour les bases de données peut contenir caractères génériques . Cela doit être expliqué en utilisant LIKE
dans 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';