Як знати всіх користувачів, які можуть отримати доступ до бази даних (MySQL)?


Відповіді:


14

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

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

Я щойно запустив це проти живої MariaDB (MySQL fork), і він повернув 2 порожні рядки.
Кріс S

1
Як називається ваша база даних? вам потрібно замінити "DB_NAME" на ім'я вашого db.
користувач79644

Запуск select user from mysql.dbбез кваліфікації також повертає 2 порожні рядки.
Chris S

Не впевнені, у чому різниця між MariaDB та MySQL, але цей запит працює, як очікувалося, у стандартній установці MySQL 5.
rvf

Це лише частина відповіді на ОП. Поле mysql.user.db може містити символи підстановки, які відповідають декільком базам даних. використання запропонованого запиту їх не вистачає. dev.mysql.com/doc/refman/5.0/uk/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/uk/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;

2
показати гранти показує лише гранти поточного користувача (увійшов у систему)
nl-x

як root, ви також можете показувати гранти для
Rowan Hawkins

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';
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.