Показать пользователей с любыми правами на базу данных. MySQL - PullRequest
14 голосов
/ 22 сентября 2011

Я должен выбрать всех пользователей с любыми правами на базу данных (например, база данных «mysql»).Какие-либо предложения?Спасибо.

Ответы [ 3 ]

25 голосов
/ 20 марта 2013

Хороший обзор всех пользователей и их приблизительные привилегии. Если есть пароль, он будет зашифрованной строкой; если нет, это поле пустое. Выбор - очень общая привилегия; insert позволяет манипулировать таблицами в базе данных; shutdown разрешает серьезные системные изменения и должен использоваться только пользователем root; возможность предоставления разрешений отделена от других.

SELECT user, host, password, select_priv, insert_priv, shutdown_priv, grant_priv 
FROM mysql.user

Просмотр разрешений для отдельных баз данных.

SELECT user, host, db, select_priv, insert_priv, grant_priv FROM mysql.db
13 голосов
/ 16 октября 2013

Вы можете определить процедуру хранения для перечисления привилегий:

delimiter //

CREATE PROCEDURE list_privileges (IN db_name CHAR(50))
BEGIN
    SELECT concat(Db,'.', '*') as 'what', User, Host, '...' as 'perms'
    FROM mysql.db
    WHERE Db=db_name
    UNION
    SELECT concat(Db,'.', Table_name), User, Host, table_priv
    FROM mysql.tables_priv
    WHERE Db=db_name and table_priv != ''
    UNION
    SELECT concat(Db,'.', Table_name, '(', Column_name,')'), User, Host, Column_priv
    FROM mysql.columns_priv
    WHERE Db=db_name
    UNION
    SELECT concat(Db,'.', Routine_name, '()'), User, Host, Proc_priv
    FROM mysql.procs_priv
    WHERE Db=db_name;
END//

delimiter ;

пример:

mysql> call list_privileges("testlink2");
+-----------------------------+-----------+-----------+---------+
| what                        | User      | Host      | perms   |
+-----------------------------+-----------+-----------+---------+
| testlink2.*                 | testlink2 | %         | ...     |
| testlink2.*                 | testlink2 | localhost | ...     |
| testlink2.executions        | testlink2 | %         | Select  |
| testlink2.users(id)         | testlink2 | %         | Select  |
| testlink2.list_privileges() | testlink2 | %         | Execute |
+-----------------------------+-----------+-----------+---------+
5 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
8 голосов
/ 22 сентября 2011

Посмотрите в базе данных mysql (фактическая база данных с именем mysql внутри сервера mysql, просто для ясности).Есть три таблицы (db, tables_priv и columns_priv), в которых хранятся привилегии в db / table / column:

SELECT 'db', User, Host
FROM db
WHERE Db='mydatabase'

UNION

SELECT 'table', User, Host
FROM tables_priv
WHERE Db='mydatabase'

UNION

SELECT 'col', User, Host
FROM columns_priv
WHERE Db='mydatabase'

должно показывать, что вам нужно.

...