SET ROLE
SET ROLE
语句用于在当前会话中启用角色。启用角色后,用户可以使用该角色的权限。
语法概述
- SetRoleStmt
SetRoleStmt ::=
"SET" "ROLE" ( "DEFAULT" | "ALL" ( "EXCEPT" Rolename ("," Rolename)* )? | "NONE" | Rolename ("," Rolename)* )?
示例
创建一个用户 'u1'@'%'
和三个角色:'r1'@'%'
、'r2'@'%'
和 'r3'@'%'
。将这些角色授予 'u1'@'%'
,并将 'r1'@'%'
设置为 'u1'@'%'
的默认角色。
CREATE USER 'u1'@'%';
CREATE ROLE 'r1', 'r2', 'r3';
GRANT 'r1', 'r2', 'r3' TO 'u1'@'%';
SET DEFAULT ROLE 'r1' TO 'u1'@'%';
以 'u1'@'%'
登录,并执行以下 SET ROLE
语句以启用所有角色。
SET ROLE ALL;
SELECT CURRENT_ROLE();
+----------------------------+
| CURRENT_ROLE() |
+----------------------------+
| `r1`@`%`,`r2`@`%`,`r3`@`%` |
+----------------------------+
1 row in set (0.000 sec)
执行以下 SET ROLE
语句以启用 'r2'
和 'r3'
。
SET ROLE 'r2', 'r3';
SELECT CURRENT_ROLE();
+-------------------+
| CURRENT_ROLE() |
+-------------------+
| `r2`@`%`,`r3`@`%` |
+-------------------+
1 row in set (0.000 sec)
执行以下 SET ROLE
语句以启用默认角色。
SET ROLE DEFAULT;
SELECT CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| `r1`@`%` |
+----------------+
1 row in set (0.000 sec)
执行以下 SET ROLE
语句以取消所有已启用的角色。
SET ROLE NONE;
SELECT CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| |
+----------------+
1 row in set (0.000 sec)
MySQL 兼容性
TiDB 中的 SET ROLE
语句与 MySQL 8.0 中的角色功能完全兼容。如果你发现任何兼容性差异,请报告一个 bug。