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;