ユーザーには複数のロールを付与できます。ロールを付与された後、そのロールがセッション内で有効な状態にある場合、ユーザーはそのロールに含まれる権限を使用できます。そうでない場合は、そのロールに含まれる権限を使用できません。現在のセッションでどのロールが有効な状態にあるか確認するには、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つのユーザーに対してのみ指定できます。
ユーザー
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;