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

19

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

user79483
источник

Ответы:

14

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

select user from mysql.db where db='DB_NAME';
user79644
источник
Я просто запустил это для живой MariaDB (MySQL fork), и он вернул 2 пустых строки.
Крис С
1
Как называется ваша база данных? вам нужно заменить "DB_NAME" на имя вашей базы данных.
user79644
Запуск select user from mysql.dbбез квалификации также возвращает 2 пустых строки.
Крис С
Не уверен, в чем различия между MariaDB и MySQL, но этот запрос выполняется, как и ожидалось, при стандартной установке MySQL 5.
rvf
Это только часть ответа на ФП. Поле mysql.user.db может содержать символы подстановки, которые соответствуют нескольким базам данных. использование предложенного вами запроса пропускает их. dev.mysql.com/doc/refman/5.0/ru/grant.html
user4514
10

Ответ 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 кажется, что наличие привилегий на уровне столбцов означает, что у вас есть привилегии на уровне таблиц. Наличие привилегий на уровне таблицы не означает, что у вас есть привилегии на уровне базы данных. Не уверен насчет привилегий на уровне процедур.

Скотт Дакворт
источник
1
Это только часть ответа. Поле mysql.user.db может содержать символы подстановки, которые соответствуют нескольким базам данных. использование предложенного вами запроса пропускает их. dev.mysql.com/doc/refman/5.0/ru/grant.html
user4514
Какая база данных? Я получаюERROR 1046 (3D000): No database selected
user124384
@ user124384 В ответе не сказано, что вы должны использовать mysqlбазу данных. Вот где хранятся все данные, используемые MySQL. Либо дайте команду USE mysql;добавления имени базы данных в имена таблиц, например, FROM mysql.dbилиFROM 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
источник
2
show grants показывает только гранты текущего (вошедшего в систему) пользователя
nl-x
как корень вы также можете показать гранты для
Роуэн Хокинс
2

Вы должны иметь в виду, что MySQLGRANT для баз данных может содержать символы подстановки . Это должно быть учтено с помощью 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';
user4514
источник