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

Расширения команды SHOW 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)

См. также

  • #53645SHOW GRANTS not displaying all the applicable grants

Последнее обновление: 2024-04-30