MySQL 8.0 リファレンスマニュアル


13.7.1.11 SET ROLE ステートメント

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

SET ROLE では、付与されたロールのうちアクティブなロールを指定することで、現行セッション内の現行ユーザーの有効な権限が変更されます。 付与されるロールには、ユーザーに明示的に付与されるロールと、mandatory_roles システム変数値で指定されるロールが含まれます。

例:

SET ROLE DEFAULT;
SET ROLE 'role1', 'role2';
SET ROLE ALL;
SET ROLE ALL EXCEPT 'role1', 'role2';

各ロール名は、セクション6.2.5「ロール名の指定」 で説明されている形式を使用します。 ロール名のホスト名部分は、省略すると'%'にデフォルト設定されます。

ユーザーに (ロールを介してではなく) 直接付与された権限は、アクティブなロールに対する変更の影響を受けません。

このステートメントは、次の役割指定子を許可します:

  • DEFAULT: アカウントのデフォルトロールをアクティブ化します。 デフォルトのロールは、SET DEFAULT ROLE で指定されたロールです。

    ユーザーがサーバーに接続して正常に認証されると、サーバーはデフォルトロールとしてアクティブ化するロールを決定します。 activate_all_roles_on_login システム変数が有効な場合、サーバーは付与されたすべてのロールをアクティブ化します。 それ以外の場合、サーバーは SET ROLE DEFAULT を暗黙的に実行します。 サーバーは、アクティブ化できるデフォルトのロールのみをアクティブ化します。 サーバーは、アクティブ化できないデフォルトロールのエラーログに警告を書き込みますが、クライアントは警告を受け取りません。

    ユーザーがセッション中に SET ROLE DEFAULT を実行する場合、デフォルトロールをアクティブ化できないと (存在しない場合やユーザーに付与されていない場合など)、エラーが発生します。 この場合、現在アクティブなロールは変更されません。

  • NONE: アクティブなロールを NONE に設定します (アクティブなロールはありません)。

  • ALL: アカウントに付与されているすべてのロールをアクティブ化します。

  • ALL EXCEPT role [, role ] ...: 指定されたロールを除く、アカウントに付与されているすべてのロールをアクティブ化します。 指定したロールが存在しているか、アカウントに付与されている必要はありません。

  • role [, role ] ...: アカウントに付与する必要がある名前付きロールをアクティブ化します。

注記

SET DEFAULT ROLESET ROLE DEFAULT は異なるステートメントです:

  • SET DEFAULT ROLE では、アカウントセッション内でデフォルトでアクティブ化するアカウントロールを定義します。

  • SET ROLE DEFAULT は、現在のセッション内のアクティブロールを現在のアカウントのデフォルトロールに設定します。

ロールの使用例は、セクション6.2.10「ロールの使用」 を参照してください。


関連キーワード:  ステートメント, CREATE, ロール, TABLE, ROLE, DROP, サブクエリー, DEFAULT, サーバー, FUNCTION