Перейти к основному содержимому

SET ROLE

SET ROLE активирует роли вместе со всеми связанными привилегиями и вложенными ролями для текущей сессии. После активации роли пользователи могут использовать эту роль для выполнения операций.

После выполнения этой команды вы можете запустить select is_role_in_session("<role_name>"); для проверки, активна ли эта роль в текущей сессии.

Эта команда поддерживается начиная с версии 1.5.0.

Примечания по использованию

Пользователи могут активировать только те роли, которые им назначены.

Вы можете запросить роли пользователя с помощью SHOW GRANTS.

Вы можете запросить активные роли текущего пользователя с помощью SELECT CURRENT_ROLE(). Для получения дополнительной информации см. current_role.

Синтаксис

-- Активировать определенные роли и выполнять операции от имени этой роли.
SET ROLE <role_name>[,<role_name>,..];
-- Активировать все роли пользователя, кроме определенных ролей.
SET ROLE ALL EXCEPT <role_name>[,<role_name>,..];
-- Активировать все роли пользователя.
SET ROLE ALL;

Параметры

role_name: имя роли

Примеры

Запросить все роли текущего пользователя.

SHOW GRANTS;
+--------------+---------+----------------------------------------------+
| UserIdentity | Catalog | Grants |
+--------------+---------+----------------------------------------------+
| 'test'@'%' | NULL | GRANT 'db_admin', 'user_admin' TO 'test'@'%' |
+--------------+---------+----------------------------------------------+

Активировать роль db_admin.

SET ROLE db_admin;

Запросить активные роли текущего пользователя.

SELECT CURRENT_ROLE();
+--------------------+
| CURRENT_ROLE() |
+--------------------+
| db_admin |
+--------------------+

Ссылки

  • CREATE ROLE: создает роль.
  • GRANT: назначает роли пользователям или другим ролям.
  • ALTER USER: изменяет роли.
  • SHOW ROLES: показывает все роли в системе.
  • current_role: показывает роли текущего пользователя.
  • is_role_in_session: проверяет, активна ли роль (или вложенная роль) в текущей сессии.
  • DROP ROLE: удаляет роль.