GRANT
特定のデータベースオブジェクトに対する権限、ロール、および所有権を付与します。これには以下が含まれます。
- ロールに権限を付与する。
- ユーザーまたは他のロールにロールを割り当てる。
- ロールに所有権を移譲する。
関連情報:
GRANTで権限またはロールを変更した後は、更新内容をすべてのクエリノードに即座に反映するために、SYSTEM FLUSH PRIVILEGES を実行してください。
構文
権限の付与
権限とは何か、およびその仕組みについては、権限 を参照してください。
GRANT {
schemaObjectPrivileges | ALL [ PRIVILEGES ] ON <privileges_level>
}
TO ROLE <role_name>
各要素の定義は次のとおりです。
schemaObjectPrivileges ::=
-- For TABLE
{ SELECT | INSERT }
-- For SCHEMA
{ CREATE | DROP | ALTER }
-- For USER
{ CREATE USER }
-- For ROLE
{ CREATE ROLE}
-- For STAGE
{ READ, WRITE }
-- For UDF
{ USAGE }
-- For MASKING POLICY (account-level privileges)
{ CREATE MASKING POLICY | APPLY MASKING POLICY }
-- For ROW ACCESS POLICY (account-level privileges)
{ CREATE ROW ACCESS POLICY | APPLY ROW ACCESS POLICY }
privileges_level ::=
*.*
| db_name.*
| db_name.tbl_name
| STAGE <stage_name>
| UDF <udf_name>
| MASKING POLICY <policy_name>
| ROW ACCESS POLICY <policy_name>
マスキングポリシー権限の付与
個々のマスキングポリシーへのアクセスを管理するには、次の形式を使用します。
GRANT APPLY ON MASKING POLICY <policy_name> TO ROLE <role_name>
GRANT ALL [ PRIVILEGES ] ON MASKING POLICY <policy_name> TO ROLE <role_name>
GRANT OWNERSHIP ON MASKING POLICY <policy_name> TO ROLE '<role_name>'
CREATE MASKING POLICYは、ロールが新しいマスキングポリシーを作成できるようにします。APPLY MASKING POLICYは、適切なALTER TABLEまたはポリシーコマンドと組み合わせることで、被付与者が任意のマスキングポリシーをアタッチ、デタッチ、記述、または削除できるようにします。GRANT APPLY ON MASKING POLICY ...は、グローバルアクセスを付与せずに、被付与者が特定のマスキングポリシーを管理できるようにします。- OWNERSHIP はマスキングポリシーに対する完全な制御を提供します。TiDB Cloud Lake は新しいポリシーに対する OWNERSHIP を作成者ロールに自動的に付与し、ポリシーが削除されるとそれを取り消します。
行アクセスポリシー権限の付与
個々の行アクセスポリシーへのアクセスを管理するには、次の形式を使用します。
GRANT APPLY ON ROW ACCESS POLICY <policy_name> TO ROLE <role_name>
GRANT ALL [ PRIVILEGES ] ON ROW ACCESS POLICY <policy_name> TO ROLE <role_name>
GRANT OWNERSHIP ON ROW ACCESS POLICY <policy_name> TO ROLE '<role_name>'
CREATE ROW ACCESS POLICYは、ロールが新しい行アクセスポリシーを作成できるようにします。APPLY ROW ACCESS POLICYは、任意の行アクセスポリシーをテーブルにアタッチまたはデタッチする権限を付与し、DESCRIBE/DROP コマンドもあわせて許可します。GRANT APPLY ON ROW ACCESS POLICY ...は、アクセスを特定の行アクセスポリシーに限定します。- OWNERSHIP は行アクセスポリシーに対する完全な制御を提供します。作成者ロールは OWNERSHIP を自動的に受け取り、ポリシーが削除されるとそれを失います。
ロールの付与
ロールとは何か、およびその仕組みについては、ロール を参照してください。
-- Grant a role to a user
GRANT ROLE <role_name> TO <user_name>
-- Grant a role to a role
GRANT ROLE <role_name> TO ROLE <role_name>
所有権の付与
所有権とは何か、およびその仕組みについては、所有権 を参照してください。
-- Grant ownership of a specific table within a database to a role
GRANT OWNERSHIP ON <database_name>.<table_name> TO ROLE '<role_name>'
-- Grant ownership of a stage to a role
GRANT OWNERSHIP ON STAGE <stage_name> TO ROLE '<role_name>'
-- Grant ownership of a user-defined function (UDF) to a role
GRANT OWNERSHIP ON UDF <udf_name> TO ROLE '<role_name>'
例
例 1: ロールへの権限の付与
ロールを作成します。
CREATE ROLE user1_role;
default データベース内の既存のすべてのテーブルに対する ALL 権限を、ロール user1_role に付与します。
GRANT ALL ON default.* TO ROLE user1_role;
SHOW GRANTS FOR ROLE user1_role;
+--------------------------------------------------+
| Grants |
+--------------------------------------------------+
| GRANT ALL ON 'default'.* TO ROLE 'user1_role' |
+--------------------------------------------------+
すべてのデータベースに対する ALL 権限を、ロール user1_role に付与します。
GRANT ALL ON *.* TO ROLE user1_role;
SHOW GRANTS FOR ROLE user1_role;
+--------------------------------------------------+
| Grants |
+--------------------------------------------------+
| GRANT ALL ON 'default'.* TO ROLE 'user1_role' |
| GRANT ALL ON *.* TO ROLE 'user1_role' |
+--------------------------------------------------+
s1 という名前の stage に対する ALL 権限を、ロール user1_role に付与します。
GRANT ALL ON STAGE s1 TO ROLE user1_role;
SHOW GRANTS FOR ROLE user1_role;
+--------------------------------------------------+
| Grants |
+--------------------------------------------------+
| GRANT ALL ON STAGE s1 TO ROLE 'user1_role' |
+--------------------------------------------------+
f1 という名前の UDF に対する ALL 権限を、ロール user1_role に付与します。
GRANT ALL ON UDF f1 TO ROLE user1_role;
SHOW GRANTS FOR ROLE user1_role;
+--------------------------------------------------+
| Grants |
+--------------------------------------------------+
| GRANT ALL ON UDF f1 TO ROLE 'user1_role' |
+--------------------------------------------------+
例 2: ロールへの特定の権限の付与
mydb データベース内の既存のすべてのテーブルに対する SELECT 権限を、ロール role1 に付与します。
ロールを作成します。
CREATE ROLE role1;
ロールに権限を付与します。
GRANT SELECT ON mydb.* TO ROLE role1;
ロールに付与されている権限を表示します。
SHOW GRANTS FOR ROLE role1;
+-------------------------------------+
| Grants |
+-------------------------------------+
| GRANT SELECT ON 'mydb'.* TO 'role1' |
+-------------------------------------+
例 3: ユーザーへのロールの付与
ユーザーを作成します。
CREATE USER user1 IDENTIFIED BY 'abc123' WITH DEFAULT_ROLE = 'role1';
ロール role1 に付与されている権限は次のとおりです。
SHOW GRANTS FOR ROLE role1;
+-------------------------------------+
| Grants |
+-------------------------------------+
| GRANT SELECT ON 'mydb'.* TO 'role1' |
+-------------------------------------+
ロール role1 をユーザー user1 に付与します。
GRANT ROLE role1 TO user1;
これで、ユーザー user1 に付与されている権限は次のとおりです。
SHOW GRANTS FOR user1;
+-------------------------------------+
| Grants |
+-------------------------------------+
| GRANT ROLE role1 TO 'user1'@'%' |
+-------------------------------------+
例 4: ロールへの所有権の付与
-- Grant ownership of all tables in the 'finance_data' database to the role 'data_owner'
GRANT OWNERSHIP ON finance_data.* TO ROLE 'data_owner';
-- Grant ownership of the table 'transactions' in the 'finance_data' schema to the role 'data_owner'
GRANT OWNERSHIP ON finance_data.transactions TO ROLE 'data_owner';
-- Grant ownership of the stage 'ingestion_stage' to the role 'data_owner'
GRANT OWNERSHIP ON STAGE ingestion_stage TO ROLE 'data_owner';
-- Grant ownership of the user-defined function 'calculate_profit' to the role 'data_owner'
GRANT OWNERSHIP ON UDF calculate_profit TO ROLE 'data_owner';
例 5: マスキングポリシー権限の付与
-- Allow the current user to create masking policies
GRANT CREATE MASKING POLICY ON *.* TO ROLE security_admin;
-- Create a masking policy while assuming the security_admin role
CREATE MASKING POLICY email_mask AS (val STRING) RETURNS STRING -> '***';
-- Grant a role the ability to apply the policy when altering tables
GRANT APPLY ON MASKING POLICY email_mask TO ROLE pii_readers;
-- Review the masking policy privileges
SHOW GRANTS ON MASKING POLICY email_mask;
例 6: 行アクセスポリシー権限の付与
-- Allow the current role to create row access policies
GRANT CREATE ROW ACCESS POLICY ON *.* TO ROLE row_policy_admin;
-- Define a row access policy while assuming the row_policy_admin role
CREATE ROW ACCESS POLICY rap_region AS (region STRING) RETURNS BOOLEAN -> region = 'APAC';
-- Allow a role to apply the policy when altering tables
GRANT APPLY ON ROW ACCESS POLICY rap_region TO ROLE apac_only;
-- Review the row access policy privileges
SHOW GRANTS ON ROW ACCESS POLICY rap_region;