SET SECONDARY ROLES
現在のセッションですべてのセカンダリロールを有効化します。これにより、ユーザーに付与されたすべてのセカンダリロールが有効になり、ユーザーの権限が拡張されます。アクティブロールとセカンダリロールの詳細については、アクティブロールとセカンダリロールを参照してください。
関連情報: SET ROLE
構文
SET SECONDARY ROLES { ALL | NONE }
例
この例では、セカンダリロールの動作と、それらを有効化/無効化する方法を示します。
ユーザー root としてロールを作成します。
まず、
adminとanalystの 2 つのロールを作成します。CREATE ROLE admin; CREATE ROLE analyst;権限を付与します。
次に、各ロールにいくつかの権限を付与します。たとえば、
adminロールにはデータベースを作成する権限を、analystロールにはテーブルから選択する権限を付与します。GRANT CREATE DATABASE ON *.* TO ROLE admin; GRANT SELECT ON *.* TO ROLE analyst;ユーザーを作成します。
次に、ユーザーを作成します。
CREATE USER 'user1' IDENTIFIED BY 'password';ロールを割り当てます。
両方のロールをユーザーに割り当てます。
GRANT ROLE admin TO 'user1'; GRANT ROLE analyst TO 'user1';アクティブロールを設定します。
ここで、
user1として TiDB Cloud Lake にログインし、アクティブロールをanalystに設定します。SET ROLE analyst;デフォルトではすべてのセカンダリロールが有効化されているため、新しいデータベースを作成できます。
CREATE DATABASE my_db;セカンダリロールを無効化します。
アクティブロール analyst には CREATE DATABASE 権限がありません。すべてのセカンダリロールを無効化すると、新しいデータベースの作成は失敗します。
SET SECONDARY ROLES NONE;
CREATE DATABASE my_db2;
error: APIError: ResponseError with 1063: Permission denied: privilege [CreateDatabase] is required on *.* for user 'user1'@'%' with roles [analyst,public]