役割を設定する
SET ROLE文は、現在のセッションでロールを有効にするために使用されます。ロールを有効にすると、ユーザーはロールの権限を使用できるようになります。
概要
- SetRoleStmt
SetRoleStmt ::=
    "SET" "ROLE" ( "DEFAULT" | "ALL" ( "EXCEPT" Rolename ("," Rolename)* )? | "NONE" | Rolename ("," Rolename)* )?
例
ユーザー'u1'@'%'と3つのロール( '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)
'r2'と'r3'有効にするには、次のSET ROLEステートメントを実行します。
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のロール機能と完全に互換性があります。互換性に関する相違点が見つかった場合は、 バグを報告する参照してください。