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

PolarDB:ロール/権限管理

最終更新日:Mar 29, 2026

PolarDB-X は MySQL 8.0 互換のロールベースアクセス制御(RBAC)をサポートします。このトピックでは、各ロール管理操作の構文と実行可能な例を説明します。

完全な MySQL 8.0 のロール仕様については、「ロールベースのアクセス制御」をご参照ください。

操作一覧

操作ステートメント
ロールの作成CREATE ROLE
ロールの削除DROP ROLE
ロールへの権限付与GRANT ... ON ... TO role
ユーザーへのロール割り当てGRANT role TO user
ユーザーのデフォルトロール設定SET DEFAULT ROLE
現在のセッションにおけるロールの有効化SET ROLE
ロールまたはユーザーの権限確認SHOW GRANTS
ロールからの権限剥奪REVOKE ... ON ... FROM role
ユーザーからのロール割り当て解除REVOKE role FROM user

ロールの作成

CREATE ROLE role [, role]...

ロール名は「名前」と「ホスト」の 2 つの部分で構成されます。

  • 名前:必須項目です。空欄にすることはできません。

  • ホスト:IP アドレスである必要があります。アンダースコア(_)およびパーセント記号(%)を含めることができますが、いずれもワイルドカードとして解釈されません。空欄の場合は、ホスト値として % が使用されます。% はワイルドカード展開ではなく、完全に一致する場合のみマッチします。

例:

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

ロールの削除

DROP ROLE role [, role] ...

例:

mysql> DROP ROLE 'role_ro'@'%';

ロールへの権限付与

この構文を使用すると、データベース権限(例:SELECTALL PRIVILEGES など)をロールに直接付与できます。この形式には、権限レベルを指定する ON 句が含まれます。

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

例:

mysql> GRANT ALL PRIVILEGES ON db1.* TO 'role_write';

ユーザーへのロール割り当て

この構文を使用して、ユーザーにロールを割り当てます。

GRANT role [, role] ...
    TO user_or_role [, user_or_role] ...
    [WITH ADMIN OPTION]

前提条件:

  • 実行アカウントには CREATE_USER 権限が必要です。

  • 実行アカウントは、割り当てるロールに対して管理者権限(admin permission)を保持している必要があります。

  • WITH ADMIN OPTION を指定すると、受信者にその割り当てられたロールに対する管理者権限が付与されます。

例:

mysql> GRANT 'role_write' TO 'user1'@'127.0.0.1';
重要

ロールを割り当てても、自動的に有効化されるわけではありません。ユーザーのセッションは、ロールが明示的に有効化されるまで、そのロールの権限を取得しません。SET DEFAULT ROLE および SET ROLE を使用してロールを有効化してください(以下のセクションを参照)。

ユーザーのデフォルトロール設定

SET DEFAULT ROLE は、ユーザーが接続した際に自動的に有効化されるロールを指定します。

SET DEFAULT ROLE
    {NONE | ALL | role [, role ] ...}
    TO user [, user ] ...

前提条件:

  • 指定するロールは、あらかじめ GRANT を使用してユーザーに割り当てられている必要があります。

  • ユーザーが該当ロールを既に割り当てられているか、あるいは CREATE_USER 権限を保持している必要があります。

例:

mysql> SET DEFAULT ROLE 'role_write' TO 'user1'@'127.0.0.1';

現在のセッションにおけるロールの有効化

SET ROLE は、現在の接続において有効なロールを変更します。この変更はセッション終了後に永続化されません。

SET ROLE {
    DEFAULT
  | NONE
  | ALL
  | ALL EXCEPT role [, role ] ...
  | role [, role ] ...
}
SET ROLE DEFAULT は、SET DEFAULT ROLE で設定されたロールを有効化します。有効化されたロールは、現在の接続にのみ適用されます。

例:

mysql> SET ROLE 'role_write';

現在有効なロールを確認するには、SELECT CURRENT_ROLE() を実行します:

mysql> SELECT CURRENT_ROLE();
+------------------+
| CURRENT_ROLE()   |
+------------------+
| 'role_write'@'%' |
+------------------+

権限の確認

SHOW GRANTS は、ユーザーまたはロールの権限およびロール割り当て情報を表示します。USING 句を追加すると、出力内でロールの権限をインライン展開できます。

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

例 — ロールの権限を確認:

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

例 — ユーザーの権限を確認(ロール権限をインライン展開):

mysql> 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'        |
+------------------------------------------------------+

-- user1 として実行
mysql> SELECT CURRENT_ROLE();
+------------------+
| CURRENT_ROLE()   |
+------------------+
| 'role_write'@'%' |
+------------------+

ロールからの権限剥奪

この構文を使用して、ロールから特定の権限を削除します。

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

例:

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

mysql> 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 ] ...

例:

mysql> 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' |
+-----------------------------------------------+

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

mysql> 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' |
+----------------------------------------------+