メインコンテンツまでスキップ
バージョン: Latest-3.4

GRANT

説明

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

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

付与可能な権限の詳細については、Privilege items を参照してください。

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

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

ヒント
  • user_admin ロールを持つユーザーのみが、他のユーザーやロールに任意の権限を付与できます。
  • ロールがユーザーに付与された後、このロールとして操作を実行する前に SET ROLE を実行してこのロールを有効化する必要があります。すべてのデフォルトロールをログイン時に有効化したい場合は、ALTER USER または SET DEFAULT ROLE を実行してください。システム内のすべての権限をすべてのユーザーにログイン時に有効化したい場合は、グローバル変数 SET GLOBAL activate_all_roles_on_login = TRUE; を設定してください。
  • 一般ユーザーは、WITH GRANT OPTION キーワードを持つ権限のみを他のユーザーやロールに付与できます。

構文

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

システム

GRANT
{ CREATE RESOURCE GROUP | CREATE RESOURCE | CREATE EXTERNAL CATALOG | REPOSITORY | BLACKLIST | FILE | OPERATE | CREATE STORAGE VOLUME }
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>(input_data_type) [, <function_name>(input_data_type),...]
| ALL GLOBAL FUNCTIONS }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]

例: GRANT usage ON GLOBAL FUNCTION a(string) to kevin;

Internal catalog

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

External catalog

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 <database_name> [, <database_name>,...] | ALL DATABASES }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
  • このコマンドを実行する前に SET CATALOG を実行する必要があります。
  • External Catalog 内のデータベースに対しては、CREATE TABLE 権限を Hive (v3.1以降) および Iceberg データベース (v3.2以降) にのみ付与できます。

テーブル

-- 特定のテーブルに対する権限を付与します。
GRANT
{ ALTER | DROP | SELECT | INSERT | EXPORT | UPDATE | DELETE | ALL [PRIVILEGES]}
ON TABLE <table_name> [, < table_name >,...]
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]

-- 特定のデータベースまたはすべてのデータベース内のすべてのテーブルに対する権限を付与します。
GRANT
{ ALTER | DROP | SELECT | INSERT | EXPORT | UPDATE | DELETE | ALL [PRIVILEGES]}
ON ALL TABLES IN { { DATABASE <database_name> } | ALL DATABASES }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
  • このコマンドを実行する前に SET CATALOG を実行する必要があります。

  • <db_name>.<table_name> を使用してテーブルを表すこともできます。

  • Internal および External Catalogs 内のすべてのテーブルに対して SELECT 権限を付与して、これらのテーブルからデータを読み取ることができます。Hive および Iceberg Catalogs 内のテーブルに対しては、INSERT 権限を付与してデータを書き込むことができます (Iceberg は v3.1以降、Hive は v3.2以降でサポート)。

    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 <database_name> } | ALL DATABASES }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
  • このコマンドを実行する前に SET CATALOG を実行する必要があります。

  • <db_name>.<view_name> を使用してビューを表すこともできます。

  • External Catalog 内のテーブルに対しては、Hive テーブルビューにのみ SELECT 権限を付与できます (v3.1以降)。

    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 <database_name> } | ALL DATABASES }
TO { ROLE | USER} {<role_name>|<user_identity>} [ WITH GRANT OPTION ]
  • このコマンドを実行する前に SET CATALOG を実行する必要があります。

  • <db_name>.<mv_name> を使用して mv を表すこともできます。

    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>(input_data_type) [, < function_name >(input_data_type),...]
ALL FUNCTIONS} IN
{ { DATABASE <database_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>(input_data_type) TO {ROLE <role_name> | USER <user_name>}

ユーザー

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

ストレージボリューム

GRANT  
{ USAGE | ALTER | DROP | ALL [PRIVILEGES] }
ON { STORAGE VOLUME < name > [, < name >,...]ALL STORAGE VOLUMES}
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 のすべてのテーブルにデータをロードする権限をロール my_role に付与します。

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

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

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

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

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

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

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

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

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

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

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

例 8: システム定義のロール db_adminuser_admin、および cluster_admin をユーザー user_platform に付与します。

GRANT db_admin, user_admin, cluster_admin TO USER user_platform;

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

GRANT IMPERSONATE ON USER 'rose'@'%' TO USER '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;

特定の external catalog に対する読み取り専用権限を付与する

-- ロールを作成する。
CREATE ROLE read_catalog_only;
-- 対象の catalog に対する USAGE 権限をロールに付与する。
GRANT USAGE ON CATALOG hive_catalog TO ROLE read_catalog_only;
-- 対応する catalog に切り替える。
SET CATALOG hive_catalog;
-- external catalog 内のすべてのテーブルとすべてのビューをクエリする権限を付与する。
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE read_catalog_only;
ヒント

external catalog のビューについては、Hive テーブルビューのみクエリできます (v3.1 以降)。

特定の external catalog に対する書き込み専用権限を付与する

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

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

特定のデータベースに対する管理者権限を付与する

-- ロールを作成する。
CREATE ROLE db1_admin;
-- 対象のデータベースに対するすべての権限をロールに付与する。このロールは、このデータベース内でテーブル、ビュー、マテリアライズドビュー、UDF を作成できます。また、このデータベースを削除または変更することもできます。
GRANT ALL ON DATABASE db1 TO ROLE db1_admin;
-- 対応する catalog に切り替える。
SET CATALOG iceberg_catalog;
-- このデータベース内のテーブル、ビュー、マテリアライズドビュー、および UDF に対するすべての権限をロールに付与する。
GRANT ALL ON ALL TABLES IN DATABASE db1 TO ROLE db1_admin;
GRANT ALL ON ALL VIEWS IN DATABASE db1 TO ROLE db1_admin;
GRANT ALL ON ALL MATERIALIZED VIEWS IN DATABASE db1 TO ROLE db1_admin;
GRANT ALL ON ALL FUNCTIONS IN DATABASE db1 TO ROLE db1_admin;

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

  • グローバルバックアップおよびリストア操作を実行する権限を付与する:

    グローバルバックアップおよびリストア操作を実行する権限により、ロールは任意のデータベース、テーブル、またはパーティションをバックアップおよびリストアできます。これには、SYSTEM レベルでの REPOSITORY 権限、default catalog でのデータベース作成権限、任意のデータベースでのテーブル作成権限、および任意のテーブルでのデータのロードおよびエクスポート権限が必要です。

    -- ロールを作成する。
    CREATE ROLE recover;
    -- SYSTEM レベルでの REPOSITORY 権限を付与する。
    GRANT REPOSITORY ON SYSTEM TO ROLE recover;
    -- default catalog でデータベースを作成する権限を付与する。
    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 権限、default catalog でのデータベース作成権限、任意のデータベースでのテーブル作成権限、任意のテーブルへのデータロード権限、およびバックアップ対象のデータベース内の任意のテーブルからデータをエクスポートする権限が必要です。

    -- ロールを作成する。
    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;

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