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 |
+--------------------+
参考
- CREATE ROLE:创建角色。
- GRANT:将角色分配给用户或其他角色。
- ALTER USER:修改角色。
- SHOW ROLES:显示系统中的所有角色。
- current_role:显示当前用户的角色。
- is_role_in_session:验证角色(或嵌套角色)是否在当前会话中处于活动状态。
- DROP ROLE:删除角色。