1人のユーザーに複数のロールを付与することができます。ロールを付与された後、そのロールがセッション内で有効な状態にある場合、ユーザーはそのロールに含まれる権限を使用できます。そうでない場合は、そのロールに含まれる権限を使用できません。現在のセッションでどのロールが有効な状態にあるか確認する必要がある場合は、CURRENT_ROLE() 関数を使用して照会できます。
デフォルトでは、他のユーザーやロールに付与されたロールは、セッション内で自動的に有効にはなりません。
ユーザーがログイン時にデフォルトで有効にするロールの指定
OceanBaseデータベースのMySQLモードでは、SET DEFAULT ROLE ステートメント、または ALTER USER ステートメントの DEFAULT ROLE 句を使用して、ユーザーがログイン時にデフォルトで有効にするロールを指定できます。
前提条件
注意
ユーザーが自身にデフォルトで有効なロールを設定する場合、特別な権限は必要ありません。
現在のユーザーは、指定しようとするロールを所有している必要があります。
現在のユーザーは
CREATE USER権限も持っている必要があります。これにより、SET DEFAULT ROLEステートメントまたはALTER USERステートメントを実行できます。
SET DEFAULT ROLE ステートメントによる設定例
SET DEFAULT ROLE ステートメントを使用する場合、1つのステートメントで複数のユーザーのログイン時のデフォルトロールを同時に指定できます。
ユーザー
test1がログインする際、デフォルトで付与されたすべてのロールを無効にするobclient [oceanbase]> SET DEFAULT ROLE NONE TO test1;複数のユーザーを指定する必要がある場合、例えば、ユーザー
test1とtest2がログインする際に、付与されたすべてのロールをデフォルトで無効にする場合、例は以下のとおりです:obclient [oceanbase]> SET DEFAULT ROLE NONE TO test1,test2;ユーザー
test1がログインする際、デフォルトで付与されたすべてのロールを有効にするobclient [oceanbase]> SET DEFAULT ROLE ALL TO test1;ユーザー
test1がログインする際、デフォルトで付与されたemployeeとdeveloperのロールを有効にするobclient [oceanbase]> SET DEFAULT ROLE employee,developer TO test1;
ALTER USER ステートメントによる設定例
ALTER USER ステートメントを使用する場合、1つのステートメントで1人のユーザーのログイン時のデフォルトロールのみを指定できます。
ユーザー
test1がログインする際、デフォルトで付与されたすべてのロールを無効にするobclient [oceanbase]> ALTER USER test1 DEFAULT ROLE NONE;ユーザー
test1がログインする際、デフォルトで付与されたすべてのロールを有効にするobclient [oceanbase]> ALTER USER test1 DEFAULT ROLE ALL;ユーザー
test1がログインする際、デフォルトで付与されたemployeeとdeveloperのロールを有効にするobclient [oceanbase]> ALTER USER test1 DEFAULT ROLE employee,developer;
ユーザーがログイン時に自動的にすべてのロールを有効にするようにする
上記のロールの有効化方法に加えて、ALTER SYSTEM 権限を持つユーザーは、グローバル変数 activate_all_roles_on_login を使用して、ログイン時にユーザーが付与されたすべてのロールを自動的に有効にすることを有効にできます。この変数のデフォルト値は off であり、ログイン時にユーザーが付与されたすべてのロールを自動的に有効にする機能を無効にします。
この変数を設定する前に、以下の点に注意する必要があります:
変数
activate_all_roles_on_loginの値がonの場合、この設定の優先順位はSET DEFAULT ROLEステートメントまたはALTER USERステートメントで指定されたデフォルトの有効ロールよりも高くなります。システムは変数activate_all_roles_on_loginの設定を使用し、ログイン時にユーザーが付与されたすべてのロールをデフォルトで自動的に有効にします。変数
activate_all_roles_on_loginの値がoffの場合、システムはSET DEFAULT ROLEステートメントまたはALTER USERステートメントで指定されたデフォルトの有効ロールを使用します。
ログイン時にユーザーが付与されたすべてのロールを自動的に有効にするには、以下のステートメントを使用します:
obclient [oceanbase]> SET GLOBAL activate_all_roles_on_login = on;
現在のセッションで有効なロールを指定する
OceanBaseデータベースのMySQLモードでは、SET ROLE ステートメントを使用して、現在のセッションでログインユーザーに付与されたロールを有効にできます。
説明
SET ROLE ステートメントで有効にしたロールは、現在のセッションにのみ影響し、後のセッションには影響しません。
操作例:
現在のセッションでデフォルトのロール設定を維持するよう指定します。
obclient [oceanbase]> SET ROLE DEFAULT;ステートメント実行後、システムは変数
activate_all_roles_on_loginの値およびSET DEFAULT ROLEステートメントまたはALTER USERステートメントで設定されたデフォルトの有効ロールに基づいてロールを有効にします:変数
activate_all_roles_on_loginの値がonの場合、セッションでユーザーに付与されたすべてのロールを有効にします。変数
activate_all_roles_on_loginの値がoffの場合、セッションでSET DEFAULT ROLEステートメントまたはALTER USERステートメントで指定されたデフォルトの有効ロールを有効にします。
現在のセッションでユーザーに付与されたすべてのロールを無効にするよう指定します。
obclient [oceanbase]> SET ROLE NONE;現在のセッションでユーザーに付与されたすべてのロールを有効にするよう指定します。
obclient [oceanbase]> SET ROLE ALL;現在のセッションで、ユーザーに付与されたロールのうち、
role1ロールを除くすべてのロールを有効にするよう指定します。obclient [oceanbase]> SET ROLE ALL EXCEPT role1;複数の除外ロールを指定することができます。
現在のセッションで、ユーザーの
employeeおよびdeveloperロールを有効にするよう指定します。obclient [oceanbase]> SET ROLE employee,developer;