SET ROLE

SET ROLE 用于在当前用户会话中启用角色。使用 SET ROLE 启用角色后,用户可以使用这些角色的权限。

语法图

SetRoleStmt

SET ROLE - 图1

1. SetRoleStmt ::=
2. "SET" "ROLE" ( "DEFAULT" | "ALL" ( "EXCEPT" Rolename ("," Rolename)* )? | "NONE" | Rolename ("," Rolename)* )?

示例

创建一个用户 'u1'@'%',创建三个角色 'r1'@'%'、'r2'@'%' 和 'r3'@'%' 并将这些角色授予给 'u1'@'%'。将 'u1'@'%' 的默认启用角色设置为 'r1'@'%'。

1. CREATE USER 'u1'@'%';
2. CREATE ROLE 'r1', 'r2', 'r3';
3. GRANT 'r1', 'r2', 'r3' TO 'u1'@'%';
4. SET DEFAULT ROLE 'r1' TO 'u1'@'%';

使用 'u1'@'%' 登录,执行 SET ROLE 将启用角色设置为 ALL。

1. SET ROLE ALL;
2. SELECT CURRENT_ROLE();
1. +----------------------------+
2. | CURRENT_ROLE()             |
3. +----------------------------+
4. | `r1`@`%`,`r2`@`%`,`r3`@`%` |
5. +----------------------------+
6. 1 row in set (0.000 sec)

执行 SET ROLE 将启用角色设置为 'r2' 和 'r3'。

1. SET ROLE 'r2', 'r3';
2. SELECT CURRENT_ROLE();
1. +-------------------+
2. | CURRENT_ROLE()    |
3. +-------------------+
4. | `r2`@`%`,`r3`@`%` |
5. +-------------------+
6. 1 row in set (0.000 sec)

执行 SET ROLE 将启用角色设置为 DEFAULT。

1. SET ROLE DEFAULT;
2. SELECT CURRENT_ROLE();
1. +----------------+
2. | CURRENT_ROLE() |
3. +----------------+
4. | `r1`@`%`       |
5. +----------------+
6. 1 row in set (0.000 sec)

执行 SET ROLE 将启用角色设置为 NONE。

1. SET ROLE NONE;
2. SELECT CURRENT_ROLE();
1. +----------------+
2. | CURRENT_ROLE() |
3. +----------------+
4. |                |
5. +----------------+
6. 1 row in set (0.000 sec)

MySQL 兼容性

SET ROLE 语句与 MySQL 8.0 的角色功能完全兼容。如发现任何兼容性差异,请尝试 TiDB 支持资源。

另请参阅