Skip to content

Latest commit

 

History

History
121 lines (88 loc) · 2.58 KB

sql-statement-set-role.md

File metadata and controls

121 lines (88 loc) · 2.58 KB
title summary aliases
SET ROLE
TiDB 数据库中 SET ROLE 的使用概况。
/docs-cn/dev/sql-statements/sql-statement-set-role/

SET ROLE

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

语法图

SetRoleStmt:

SetRoleStmt

SetRoleOpt:

SetRoleOpt

SetDefaultRoleOpt:

SetDefaultRoleOpt

示例

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

{{< copyable "sql" >}}

CREATE USER 'u1'@'%';
CREATE ROLE 'r1', 'r2', 'r3';
GRANT 'r1', 'r2', 'r3' TO 'u1'@'%';
SET DEFAULT ROLE 'r1' TO 'u1'@'%';

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

{{< copyable "sql" >}}

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

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

{{< copyable "sql" >}}

SET ROLE 'r2', 'r3';
SELECT CURRENT_ROLE();
+-------------------+
| CURRENT_ROLE()    |
+-------------------+
| `r2`@`%`,`r3`@`%` |
+-------------------+
1 row in set (0.000 sec)

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

{{< copyable "sql" >}}

SET ROLE DEFAULT;
SELECT CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| `r1`@`%`       |
+----------------+
1 row in set (0.000 sec)

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

{{< copyable "sql" >}}

SET ROLE NONE;
SELECT CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
|                |
+----------------+
1 row in set (0.000 sec)

MySQL 兼容性

SET ROLE 语句与 MySQL 8.0 的角色功能完全兼容。如发现任何兼容性差异,请在 GitHub 上提交 issue

另请参阅