Перейти к содержанию

Просмотр полных привилегий с помощью SHOW EFFECTIVE GRANTS

В MySQL команда SHOW GRANTS имеет следующие ограничения:

  • Отображает только явно назначенные привилегии

  • Не отображает унаследованные привилегии анонимной учётной записи

  • Не отображает привилегии, унаследовонные через роли, если не задано указание USING

Другие привилегии могут присутствовать в учётной записи, но не отображаться. Например:

-- Создаёт именованного и анонимного пользователей
mysql> CREATE USER 'user1'@'localhost';
mysql> CREATE USER ''@'localhost';

-- Назначаем привилегии анонимному пользователю
mysql> GRANT SELECT ON db.* TO ''@'localhost';
-- Проверяем привилегии пользователя user1
mysql> SHOW GRANTS FOR 'user1'@'localhost';
Ожидаемый результат
GRANT USAGE ON *.* TO 'user1'@'localhost'

Несмотря на то, что 'user1'@'localhost' может использовать SELECT on db.*, эта привилегия не присутствует в выводе SHOW GRANTS.

В MyDB Сервер для MySQL команда SHOW EFFECTIVE GRANTS предоставляет полное описание привилегий пользователя. Она показывает не только привилегии, назначенные пользователю напрямую, но и все унаследованные из других учётных записей, таких как анонимные пользователи или роли. Это описание включет привилегии на уровне системы, базы данных и таблицы и даёт полную картину пользовательских прав внутри базы.

Преимущества:

  • Показывает полную картину привилегий

  • Помогает найти источники привилегий

  • Упрощает аудит безопасности

  • Упрощает устранение проблем

  • Раскрывает унаследованные привилегии

В Oracle MySQL SHOW GRANTS отображает только явно назначенные привилегии для указанной учетной записи. Для учетной записи могут быть доступны и другие привилегии, но они не отображаются. Например, если существует анонимная учетная запись, указанная учетная запись может иметь возможность использовать привилегии анонимной, но SHOW GRANTS не отобразит их. MyDB Сервер для MySQL предлагает команду SHOW EFFECTIVE GRANTS для отображения всех действующих привилегий для учетной записи, включая те, что назначены неявно через другие учётные записи.

Пример

Если мы создадим следующих пользователей:

mysql> CREATE USER grantee@localhost IDENTIFIED BY 'grantee1';
Ожидаемый результат
Query OK, 0 rows affected (0.50 sec)
mysql> CREATE USER grantee IDENTIFIED BY 'grantee2';
Ожидаемый результат
Query OK, 0 rows affected (0.09 sec)
mysql> CREATE DATABASE db2;
Ожидаемый результат
Query OK, 1 row affected (0.20 sec)
mysql> GRANT ALL PRIVILEGES ON db2.* TO grantee WITH GRANT OPTION;
Ожидаемый результат
Query OK, 0 rows affected (0.12 sec)
  • Вывод SHOW GRANTS перед изменением:
mysql> SHOW GRANTS;
Ожидаемый результат
+----------------------------------------------------------------------------------------------------------------+
| Grants for grantee@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'grantee'@'localhost' IDENTIFIED BY PASSWORD '*9823FF338D44DAF02422CF24DD1F879FB4F6B232' |
+----------------------------------------------------------------------------------------------------------------+
1 row in set (0.04 sec)

Хотя разрешение на базу данных db2 не показано, у пользователя grantee достаточно прав для создания таблицы в этой базе данных:

user@trusty:~$ mysql -ugrantee -pgrantee1 -h localhost
mysql> CREATE TABLE db2.t1(a int);
Ожидаемый результат
Query OK, 0 rows affected (1.21 sec)
  • Вывод SHOW EFFECTIVE GRANTS показывает все привилегии для пользователя grantee:
mysql> SHOW EFFECTIVE GRANTS;
Ожидаемый результат
+-------------------------------------------------------------------+
| Grants for grantee@localhost                                      |
+-------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'grantee'@'localhost' IDENTIFIED BY PASSWORD|
| '*9823FF338D44DAF02422CF24DD1F879FB4F6B232'                       |
| GRANT ALL PRIVILEGES ON `db2`.* TO 'grantee'@'%' WITH GRANT OPTION|
+-------------------------------------------------------------------+
2 rows in set (0.00 sec)

Последнее обновление: 2025-01-28