メインコンテンツまでスキップ

GRANT

GRANT(付与)

説明

ユーザーまたはロールに対して特定のオブジェクトに対する1つ以上の権限を付与します。

ユーザーや他のロールにロールを付与します。

付与できる権限の詳細については、権限アイテムを参照してください。

GRANT操作を実行した後、SHOW GRANTSを実行して詳細な権限情報を表示するか、REVOKEを実行して権限やロールを取り消すことができます。

GRANT操作を実行する前に、関連するユーザーやロールが作成されていることを確認してください。詳細については、CREATE USERCREATE ROLEを参照してください。

注記

user_adminロールを持つユーザーのみが他のユーザーやロールに対して任意の権限を付与できます。 他のユーザーは、WITH GRANT OPTIONキーワードを使用して他のユーザーやロールに権限を付与することができます。

構文

ロールまたはユーザーに対する権限の付与

システム

GRANT
{ CREATE RESOURCE GROUP | CREATE RESOURCE | CREATE EXTERNAL CATALOG | REPOSITORY | BLACKLIST | FILE | OPERATE }
ON SYSTEM
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]

リソースグループ

GRANT
{ ALTER | DROP | ALL [PRIVILEGES] }
ON { RESOURCE GROUP <resource_group_name> [, <resource_group_name >,...]ALL RESOURCE GROUPS}
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]

リソース

GRANT
{ USAGE | ALTER | DROP | ALL [PRIVILEGES] }
ON { RESOURCE <resource_name> [, < resource_name >,...]ALL RESOURCES}
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]

グローバルUDF

GRANT
{ USAGE | DROP | ALL [PRIVILEGES]}
ON { GLOBAL FUNCTION <function_name> [, < function_name >,...]
| ALL GLOBAL FUNCTIONS }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]

内部カタログ

GRANT
{ USAGE | CREATE DATABASE | ALL [PRIVILEGES]}
ON CATALOG default_catalog
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]

外部カタログ

GRANT
{ USAGE | DROP | ALL [PRIVILEGES] }
ON { CATALOG <catalog_name> [, <catalog_name>,...] | ALL CATALOGS}
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]

データベース

GRANT
{ ALTER | DROP | CREATE TABLE | CREATE VIEW | CREATE FUNCTION | CREATE MATERIALIZED VIEW | ALL [PRIVILEGES] }
ON { DATABASE <db_name> [, <db_name>,...] | ALL DATABASES }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
  • このコマンドを実行する前に、先にSET CATALOGを実行する必要があります。

テーブル

GRANT
{ ALTER | DROP | SELECT | INSERT | EXPORT | UPDATE | DELETE | ALL [PRIVILEGES]}
ON { TABLE <table_name> [, < table_name >,...]
| ALL TABLES} IN
{ DATABASE <db_name> | ALL DATABASES }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
  • このコマンドを実行する前に、先にSET CATALOGを実行する必要があります。
  • <db_name>.<table_name>を使用してテーブルを表すこともできます。
    GRANT <priv> ON TABLE <db_name>.<table_name> TO {ROLE <role_name> | USER <user_name>}

ビュー

GRANT  
{ ALTER | DROP | SELECT | ALL [PRIVILEGES]}
ON { VIEW <view_name> [, < view_name >,...]
ALL VIEWS} IN
{ DATABASE <db_name> | ALL DATABASES }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
  • このコマンドを実行する前に、先にSET CATALOGを実行する必要があります。
  • <db_name>.<view_name>を使用してビューを表すこともできます。
    GRANT <priv> ON VIEW <db_name>.<view_name> TO {ROLE <role_name> | USER <user_name>}

マテリアライズドビュー

GRANT
{ SELECT | ALTER | REFRESH | DROP | ALL [PRIVILEGES]}
ON { MATERIALIZED VIEW <mv_name> [, < mv_name >,...]
ALL MATERIALIZED VIEWS} IN
{ DATABASE <db_name> | ALL DATABASES }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
  • このコマンドを実行する前に、先にSET CATALOGを実行する必要があります。
  • <db_name>.<mv_name>を使用してマテリアライズドビューを表すこともできます。
    GRANT <priv> ON MATERIALIZED_VIEW <db_name>.<mv_name> TO {ROLE <role_name> | USER <user_name>}

関数

GRANT
{ USAGE | DROP | ALL [PRIVILEGES]}
ON { FUNCTION <function_name> [, < function_name >,...]
ALL FUNCTIONS} IN
{ DATABASE <db_name> | ALL DATABASES }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
  • このコマンドを実行する前に、先にSET CATALOGを実行する必要があります。
  • <db_name>.<function_name>を使用して関数を表すこともできます。
    GRANT <priv> ON FUNCTION <db_name>.<function_name> TO {ROLE <role_name> | USER <user_name>}

ユーザー

GRANT IMPERSONATE
ON USER <user_identity>
TO USER <user_identity> [ WITH GRANT OPTION ]

ストレージボリューム

GRANT
CREATE STORAGE VOLUME
ON SYSTEM
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]

GRANT
{ USAGE | ALTER | DROP | ALL [PRIVILEGES] }
ON { STORAGE VOLUME < name > [, < name >,...]ALL STORAGE VOLUME}
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]

ロールをロールまたはユーザーに付与

GRANT <role_name> [,<role_name>, ...] TO ROLE <role_name>
GRANT <role_name> [,<role_name>, ...] TO USER <user_identity>

例1: ユーザーjackにすべてのデータベースのすべてのテーブルからデータを読む権限を付与します。

GRANT SELECT ON *.* TO 'jack'@'%';

例2: ユーザーにデータベースdb1のすべてのテーブルにデータをロードする権限を付与します。

GRANT INSERT ON db1.* TO ROLE 'my_role';

例3: ユーザーjackにデータベースdb1のテーブルtbl1の読み取り、変更、およびデータのロード権限を付与します。

GRANT SELECT,ALTER,INSERT ON db1.tbl1 TO 'jack'@'192.8.%';

例4: ユーザーjackにすべてのリソースの使用権限を付与します。

GRANT USAGE ON RESOURCE * TO 'jack'@'%';

例5: ユーザーjackにリソースspark_resourceの使用権限を付与します。

GRANT USAGE ON RESOURCE 'spark_resource' TO 'jack'@'%';

例6: ロールmy_roleにリソースspark_resourceの使用権限を付与します。

GRANT USAGE ON RESOURCE 'spark_resource' TO ROLE 'my_role';

例7: テーブルsr_memberからデータを読む権限をユーザーjackに付与し、ユーザーjackが他のユーザーやロールにこの権限を付与できるようにします(WITH GRANT OPTIONを指定します)。

GRANT SELECT ON TABLE sr_member TO USER jack@'172.10.1.10' WITH GRANT OPTION;

例8: システムで定義されたdb_adminuser_admincluster_adminのロールをユーザーuser_platformに付与します。

GRANT db_admin, user_admin, cluster_admin TO USER user_platform;

例9: ユーザーjackがユーザーroseとして操作を行うことができるように許可します。

GRANT IMPERSONATE ON 'rose'@'%' TO 'jack'@'%';

ベストプラクティス - シナリオに基づいたロールのカスタマイズ

特権とユーザーを管理するためにロールをカスタマイズすることをお勧めします。次の例では、いくつかの一般的なシナリオに対して特権のいくつかの組み合わせを分類しています。

StarRocksテーブルに対するグローバルな読み取り専用権限の付与

-- ロールを作成します。
CREATE ROLE read_only;
-- ロールに対してすべてのカタログのUSAGE特権を付与します。
GRANT USAGE ON ALL CATALOGS TO ROLE read_only;
-- ロールに対してすべてのテーブルのクエリ特権を付与します。
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE read_only;
-- ロールに対してすべてのビューのクエリ特権を付与します。
GRANT SELECT ON ALL VIEWS IN ALL DATABASES TO ROLE read_only;
-- ロールに対してすべてのマテリアライズドビューのクエリ特権とそのクエリのスピードアップ特権を付与します。
GRANT SELECT ON ALL MATERIALIZED VIEWS IN ALL DATABASES TO ROLE read_only;

さらに、クエリでUDFを使用する特権も付与できます。

-- ロールに対してすべてのデータベースレベルのUDFのUSAGE特権を付与します。
GRANT USAGE ON ALL FUNCTIONS IN ALL DATABASES TO ROLE read_only;
-- ロールに対してグローバルなUDFのUSAGE特権を付与します。
GRANT USAGE ON ALL GLOBAL FUNCTIONS TO ROLE read_only;

StarRocksテーブルに対するグローバルな書き込み権限の付与

-- ロールを作成します。
CREATE ROLE write_only;
-- ロールに対してすべてのカタログのUSAGE特権を付与します。
GRANT USAGE ON ALL CATALOGS TO ROLE write_only;
-- ロールに対してすべてのテーブルのINSERTおよびUPDATE特権を付与します。
GRANT INSERT, UPDATE ON ALL TABLES IN ALL DATABASES TO ROLE write_only;
-- ロールに対してすべてのマテリアライズドビューのREFRESH特権を付与します。
GRANT REFRESH ON ALL MATERIALIZED VIEWS IN ALL DATABASES TO ROLE write_only;

特定の外部カタログに対する読み取り専用権限の付与

-- ロールを作成します。
CREATE ROLE read_catalog_only;
-- ロールに対して対象のカタログのUSAGE特権を付与します。
GRANT USAGE ON CATALOG hive_catalog TO ROLE read_catalog_only;
-- 対応するカタログに切り替えます。
SET CATALOG hive_catalog;
-- ロールに対してすべてのデータベースのすべてのテーブルのクエリ特権を付与します。
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE read_catalog_only;
-- ロールに対してすべてのデータベースのすべてのビューのクエリ特権を付与します。
GRANT SELECT ON ALL VIEWS IN ALL DATABASES TO ROLE read_catalog_only;

注: Hiveテーブルビューのみクエリを実行できます(v3.1以降)。

特定の外部カタログに対する書き込み専用権限の付与

v3.1以降、Icebergテーブルにのみデータを書き込むことができます。

-- ロールを作成します。
CREATE ROLE write_catalog_only;
-- ロールに対して対象のカタログのUSAGE特権を付与します。
GRANT USAGE ON CATALOG iceberg_catalog TO ROLE read_catalog_only;
-- 対応するカタログに切り替えます。
SET CATALOG iceberg_catalog;
-- ロールにIcebergテーブルにデータを書き込む特権を付与します。
GRANT INSERT ON ALL TABLES IN ALL DATABASES TO ROLE write_catalog_only;

グローバル、データベース、テーブル、およびパーティションレベルのバックアップおよびリストア操作を実行するための特権の付与

  • グローバルなバックアップおよびリストア操作を実行する特権の付与:グローバルなバックアップおよびリストア操作を実行する特権は、任意のデータベース、テーブル、またはパーティションをバックアップおよびリストアするためのものです。SYSTEMレベルのREPOSITORY特権、デフォルトカタログでデータベースを作成する特権、すべてのデータベースでテーブルを作成する特権、および任意のテーブルでデータをロードおよびエクスポートする特権が必要です。

    -- ロールを作成します。
    CREATE ROLE recover;
    -- SYSTEMレベルでのREPOSITORY特権を付与します。
    GRANT REPOSITORY ON SYSTEM TO ROLE recover;
    -- デフォルトカタログでデータベースを作成する特権を付与します。
    GRANT CREATE DATABASE ON CATALOG default_catalog TO ROLE recover;
    -- 任意のデータベースでテーブルを作成する特権を付与します。
    GRANT CREATE TABLE ON ALL DATABASES TO ROLE recover;
    -- 任意のテーブルでデータをロードおよびエクスポートする特権を付与します。
    GRANT INSERT, EXPORT ON ALL TABLES IN ALL DATABASES TO ROLE recover;
  • データベースレベルのバックアップおよびリストア操作を実行する特権の付与:データベースレベルのバックアップおよびリストア操作を実行する特権には、SYSTEMレベルのREPOSITORY特権、デフォルトカタログでデータベースを作成する特権、任意のデータベースでテーブルを作成する特権、任意のテーブルでデータをロードする特権、指定したデータベースのテーブルからデータをエクスポートする特権が必要です。

    -- ロールを作成します。
    CREATE ROLE recover_db;
    -- SYSTEMレベルでのREPOSITORY特権を付与します。
    GRANT REPOSITORY ON SYSTEM TO ROLE recover_db;
    -- デフォルトカタログでデータベースを作成する特権を付与します。
    GRANT CREATE DATABASE ON CATALOG default_catalog TO ROLE recover_db;
    -- 任意のデータベースでテーブルを作成する特権を付与します。
    GRANT CREATE TABLE ON ALL DATABASES TO ROLE recover_db;
    -- 任意のテーブルでデータをロードする特権を付与します。
    GRANT INSERT ON ALL TABLES IN ALL DATABASES TO ROLE recover_db;
    -- バックアップするデータベースのテーブルからデータをエクスポートする特権を付与します。
    GRANT EXPORT ON ALL TABLES IN DATABASE <db_name> TO ROLE recover_db;
  • テーブルレベルのバックアップおよびリストア操作を実行する特権の付与:テーブルレベルのバックアップおよびリストア操作を実行する特権には、SYSTEMレベルのREPOSITORY特権、対応するデータベースでテーブルを作成する特権、任意のデータベースでテーブルにデータをロードする特権、および対象のテーブルからデータをエクスポートする特権が必要です。

    -- ロールを作成します。
    CREATE ROLE recover_tbl;
    -- SYSTEMレベルでのREPOSITORY特権を付与します。
    GRANT REPOSITORY ON SYSTEM TO ROLE recover_tbl;
    -- 対応するデータベースでテーブルを作成する特権を付与します。
    GRANT CREATE TABLE ON DATABASE <db_name> TO ROLE recover_tbl;
    -- 任意のデータベースでテーブルにデータをロードする特権を付与します。
    GRANT INSERT ON ALL TABLES IN DATABASE <db_name> TO ROLE recover_db;
    -- バックアップするテーブルからデータをエクスポートする特権を付与します。
    GRANT EXPORT ON TABLE <table_name> TO ROLE recover_tbl;
  • パーティションレベルのバックアップおよびリストア操作を実行する特権の付与:パーティションレベルのバックアップおよびリストア操作を実行するためには、SYSTEMレベルのREPOSITORY特権と対応するテーブルでデータをロードおよびエクスポートする特権が必要です。

    -- ロールを作成します。
    CREATE ROLE recover_par;
    -- SYSTEMレベルでのREPOSITORY特権を付与します。
    GRANT REPOSITORY ON SYSTEM TO ROLE recover_par;
    -- 対応するテーブルでデータをロードおよびエクスポートする特権を付与します。
    GRANT INSERT, EXPORT ON TABLE <table_name> TO ROLE recover_par;

マルチサービスのアクセス制御のベストプラクティスについては、マルチサービスアクセス制御を参照してください。