すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ロールと権限の管理

最終更新日:Aug 29, 2026

本トピックでは、ロールと権限を管理するための構文について説明し、関連する例を示します。

PolarDB-X は、ネイティブ MySQL 8.0 のロールベースアクセス制御と互換性があります。詳細については、ロールベースアクセス制御に関する MySQL ドキュメントをご参照ください。

ロールの作成

構文:

CREATE ROLE role [, role]...
role は、user と同様に、名前とホストで構成されます。
  • 名前を空にすることはできません。
  • ホストは、次のルールに従う必要があります:
    • ホストには、IP アドレスまたはホスト名を指定できます。パーセント記号 (%) とアンダースコア (_) はワイルドカードとして機能します。
    • ホストが指定されていない場合、デフォルトは '%' になります。これは、任意のホストに一致するワイルドカードとして機能します。

例:

CREATE ROLE 'role_ro'@'%', 'role_write';

ロールの削除

構文:

DROP ROLE role [, role] ...

例:

DROP ROLE 'role_ro'@'%';

ロールの付与

ロールへの権限の付与

構文:

GRANT priv_type [, priv_type] ... ON priv_level TO role [, role]... [WITH GRANT OPTION]

例:

GRANT ALL PRIVILEGES ON db1.* TO 'role_write';
ユーザーへのロールの付与

構文:

GRANT role [, role] ...
    TO user_or_role [, user_or_role] ...
    [WITH ADMIN OPTION]
注意事項:
  • このコマンドを実行するには、次のいずれかの条件を満たす必要があります:
    • 現在のユーザーが `CREATE_USER` 権限を持っている。
    • 現在のユーザーに `ADMIN OPTION` 付きでロールが付与されている。
  • `WITH ADMIN OPTION` 句を含めると、ロールを付与されたユーザーは、そのロールを他のユーザーに付与できます。
  • ユーザーにロールを付与しても、その権限は自動的に有効になりません。ロールを有効にするには、SET DEFAULT ROLE または SET ROLE を使用する必要があります。

例:

GRANT 'role_write' TO 'user1'@'127.0.0.1';
デフォルトロールの設定

構文:

SET DEFAULT ROLE
    {NONE | ALL | role [, role ] ...}
    TO user [, user ] ...
このコマンドを実行するには、次のいずれかの条件を満たす必要があります:
  • 指定されたロールが、ターゲットユーザーにすでに付与されている。
  • ご自身がターゲットユーザーであるか、`CREATE_USER` 権限を持っている。

例:

SET DEFAULT ROLE 'role_write' TO 'user1'@'127.0.0.1';
セッションロールの設定

構文:

SET ROLE {
    DEFAULT
  | NONE
  | ALL
  | ALL EXCEPT role [, role ] ...
  | role [, role ] ...
}
説明
  • SET ROLE DEFAULT ステートメントを実行すると、SET DEFAULT ROLE ステートメントで指定されたロールがアクティブなロールになります。
  • この構文で有効化されたロールは、現在のセッションでのみ有効です。

例:

SET ROLE 'role_write';

ロール権限の表示

構文:

SHOW GRANTS
    [FOR user_or_role
        [USING role [, role] ...]]

例:

SHOW GRANTS FOR 'role_write'@'%';
+---------------------------------------------------+
| GRANTS FOR 'ROLE_WRITE'@'%'                       |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO 'role_write'@'%'            |
| GRANT ALL PRIVILEGES ON db1.* TO 'role_write'@'%' |
+---------------------------------------------------+

SHOW GRANTS FOR 'user1'@'127.0.0.1' USING 'role_write';
+------------------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1'                       |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'            |
| GRANT ALL PRIVILEGES ON db1.* TO 'user1'@'127.0.0.1' |
| GRANT 'role_write'@'%' TO 'user1'@'127.0.0.1'        |
+------------------------------------------------------+

-- Run in a session as user1
SELECT CURRENT_ROLE();
+------------------+
| CURRENT_ROLE()   |
+------------------+
| 'role_write'@'%' |
+------------------+

ロールの取り消し

ロールからの権限の取り消し

構文:

REVOKE priv_type [, priv_type] ... ON priv_level FROM role [, role]...

例:

REVOKE ALL PRIVILEGES ON db1.* FROM 'role_write';

SHOW GRANTS FOR 'role_write'@'%';
+----------------------------------------+
| GRANTS FOR 'ROLE_WRITE'@'%'            |
+----------------------------------------+
| GRANT USAGE ON *.* TO 'role_write'@'%' |
+----------------------------------------+
ユーザーからのロールの取り消し

構文:

REVOKE role [, role ] ... FROM user_or_role [, user_or_role ] ...

例:

SHOW GRANTS FOR 'user1'@'127.0.0.1';
+-----------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1'                |
+-----------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'     |
| GRANT SELECT ON db1.* TO 'user1'@'127.0.0.1'  |
| GRANT 'role_write'@'%' TO 'user1'@'127.0.0.1' |
+-----------------------------------------------+

REVOKE 'role_write' FROM 'user1'@'127.0.0.1';

SHOW GRANTS FOR 'user1'@'127.0.0.1';
+----------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1'               |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'    |
| GRANT SELECT ON db1.* TO 'user1'@'127.0.0.1' |
+----------------------------------------------+