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 ステートメントを使用する場合、各ステートメントで複数のユーザーのログイン時にデフォルトで有効にするロールを同時に指定できます。
ユーザー
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ステートメントで有効にしたロールは、現在のSessionにのみ影響し、後続のSessionには影響しません。
操作例は以下のとおりです:
現在のセッションで、デフォルトのロール設定を維持するように指定します。
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;