Назад | Перейти на главную страницу

Как узнать всех пользователей, имеющих доступ к базе данных (MySQL)?

Как узнать всех пользователей, имеющих доступ к базе данных?

Подключитесь к экземпляру mysql как пользователь с правами администратора (обычно как root) и введите следующую команду ...

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

Ответ user79644 получает пользователей с привилегиями уровня базы данных, но пропустит пользователей с привилегиями только уровня таблицы, уровня столбца или уровня процедуры. Чтобы найти их все, используйте следующие утверждения:

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

По крайней мере, в MySQL 5.5 кажется, что привилегии на уровне столбца подразумевают, что у вас есть привилегии на уровне таблицы. Наличие привилегий на уровне таблицы не означает, что у вас есть привилегии на уровне базы данных. Не уверен насчет привилегий на уровне процедуры.

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

Следует иметь в виду, что MySQL GRANT для баз данных может содержать символы подстановки. Это должно быть учтено с помощью LIKE в запросе:

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