跳到主要内容
版本: 最新版本-3.5

SET ROLE

SET ROLE 用于为当前会话激活角色,以及所有与之关联的权限和嵌套角色。角色激活后,用户可以使用此角色执行操作。

执行此命令后,您可以运行 select is_role_in_session("<角色名>"); 来验证该角色是否在当前会话中处于活动状态。

v3.0 及以上版本支持此命令。

使用说明

用户只能激活已分配给他们的角色。

您可以使用 SHOW GRANTS 查询用户的角色。

您可以使用 SELECT CURRENT_ROLE() 查询当前用户的活动角色。有关更多信息,请参见 current_role

语法

-- Active specific roles and perform operations as this role.
SET ROLE <role_name>[,<role_name>,..];
-- Activate all roles of a user, except for specific roles.
SET ROLE ALL EXCEPT <role_name>[,<role_name>,..];
-- Activate all roles of a user.
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 |
+--------------------+

参考