カテゴリ:

ユーザーとセキュリティ DDL (アクセス制御)

GRANT <権限> ... TO ROLE

セキュリティ保護可能なオブジェクトに対する1つ以上のアクセス権限をロールに付与します。付与できる権限はオブジェクト固有であり、次のカテゴリに分類されます。

  • グローバル権限

  • アカウントオブジェクト(リソースモニター、仮想ウェアハウス、およびデータベース)の権限

  • スキーマの権限

  • スキーマオブジェクト(テーブル、ビュー、ステージ、ファイル形式、 UDFs、およびシーケンス)の権限

ロールとセキュリティ保護可能なオブジェクトの詳細については、 Snowflakeのアクセス制御 をご参照ください。

バリエーション:

GRANT OWNERSHIPGRANT <privilege> ... TO SHARE

こちらもご参照ください:

REVOKE <権限> ... FROM ROLE

このトピックの内容:

構文

GRANT {  { globalPrivileges         | ALL [ PRIVILEGES ] } ON ACCOUNT
       | { accountObjectPrivileges  | ALL [ PRIVILEGES ] } ON { RESOURCE MONITOR | WAREHOUSE | DATABASE | INTEGRATION } <object_name>
       | { schemaPrivileges         | ALL [ PRIVILEGES ] } ON { SCHEMA <schema_name> | ALL SCHEMAS IN DATABASE <db_name> }
       | { schemaPrivileges         | ALL [ PRIVILEGES ] } ON { FUTURE SCHEMAS IN DATABASE <db_name> }
       | { schemaObjectPrivileges   | ALL [ PRIVILEGES ] } ON { <object_type> <object_name> | ALL <object_type_plural> IN SCHEMA <schema_name> }
       | { schemaObjectPrivileges   | ALL [ PRIVILEGES ] } ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
      }
  TO [ ROLE ] <role_name> [ WITH GRANT OPTION ]

条件:

globalPrivileges ::=
  { { CREATE { ROLE | USER | WAREHOUSE | DATABASE | INTEGRATION } } | APPLY MASKING POLICY | EXECUTE TASK | MANAGE GRANTS | MONITOR { EXECUTION | USAGE }  } [ , ... ]
accountObjectPrivileges ::=
-- For RESOURCE MONITOR
  { MODIFY | MONITOR } [ , ... ]
-- For WAREHOUSE
  { MODIFY | MONITOR | USAGE | OPERATE } [ , ... ]
-- For USER
  { MONITOR } [ , ... ]
-- For DATABASE
  { MODIFY | MONITOR | USAGE | CREATE SCHEMA | IMPORTED PRIVILEGES } [ , ... ]
-- For INTEGRATION
  { USAGE | USE_ANY_ROLE } [ , ... ]
schemaPrivileges ::=
  { MODIFY | MONITOR | USAGE | CREATE { TABLE | EXTERNAL TABLE | VIEW | MATERIALIZED VIEW | MASKING POLICY | FILE FORMAT | STAGE | PIPE | STREAM | TASK | SEQUENCE | FUNCTION (UDF) | PROCEDURE } } [ , ... ]
schemaObjectPrivileges ::=
-- For TABLE
  { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES } [ , ... ]
-- For VIEW
  { SELECT | REFERENCES } [ , ... ]
-- For MATERIALIZED VIEW
    SELECT
-- For internal STAGE
    READ [ , WRITE ]
-- For external STAGE
    USAGE
-- For FILE FORMAT, PROCEDURE, FUNCTION (UDF or external function), or SEQUENCE
    USAGE
-- For STREAM
    SELECT
-- For TASK
   { MONITOR | OPERATE } [ , ... ]
-- For MASKING POLICY
    APPLY

各オブジェクトタイプでサポートされている権限の詳細については、 アクセス制御権限 をご参照ください。

必須パラメーター

オブジェクト名

権限が付与されるオブジェクトの識別子を指定します。

オブジェクトタイプ

オブジェクトのタイプを指定します(スキーマオブジェクトの場合)。

TABLE | EXTERNAL TABLE | VIEW | MATERIALIZED VIEW | STAGE | FILE FORMAT | FUNCTION | PROCEDURE | SEQUENCE | STREAM | TASK

オブジェクト型の複数形

オブジェクト型 の複数形(例: TABLESVIEWS)。

ロール名

受信者ロール(つまり、権限が付与されるロール)の識別子を指定します。

オプションのパラメーター

ON FUTURE

既存のオブジェクトではなく、指定されたタイプの新しい(つまり、将来の)データベースまたはスキーマオブジェクト(テーブルやビューなど)に権限を付与することを指定します。 ON FUTURE キーワードと REVOKE <権限> ... FROM ROLE を使用すると、将来の付与を随時取り消すことができます。既存のオブジェクトに付与された権限は保持されます。今後の許可の詳細については、 このトピックの データベースまたはスキーマオブジェクトの将来の付与 をご参照ください。

WITH GRANT OPTION

指定した場合、受信者のロールは他のロールに権限を付与できます。

デフォルト:値なし(受信者のロールは他のロールに権限を付与できない)

注釈

WITH GRANT OPTION パラメーターは、 IMPORTED PRIVILEGES 権限をサポートしていません。詳細については、 共有データベースでの権限の付与 をご参照ください。

使用上の注意

  • オブジェクト(またはスキーマ内の指定されたタイプのすべてのオブジェクト)に対する OWNERSHIP 権限をロールに付与し、オブジェクトの所有権をあるロールから別のロールに譲渡するには、代わりに GRANT OWNERSHIP を使用します。GRANT OWNERSHIP コマンドの構文は異なります。

  • 単一の GRANT ステートメントで同じオブジェクトタイプに複数の権限を指定できます(各権限をコンマで区切る)か、特別な ALL [ PRIVILEGES ] キーワードを使用して、指定したオブジェクトタイプにすべての適用可能な権限を付与できます。ただし、 GRANT コマンドを実行するロールが保持および付与できる権限のみが実際にターゲットロールに付与されることに注意してください。付与できなかった権限については、警告メッセージが返されます。

  • 特定のロールに付与された権限は、ロールが付与された他のロール、およびロール階層内の他のより高いレベルのロールによって自動的に継承されます。詳細については、 Snowflakeのアクセス制御 をご参照ください。

  • データベースの場合、 IMPORTED PRIVILEGES 権限は共有データベース(共有から作成されたデータベース)にのみ適用されます。詳細については、 データコンシューマー をご参照ください。

  • スキーマおよびスキーマ内のオブジェクトの場合は、 ALL オブジェクト型の複数形 in コンテナー オプションが提供され、コンテナー(つまり、データベースまたはスキーマ)内の同じ型のすべてのオブジェクトに対する権限を付与します。これは便利なオプションです。内部的には、コマンドは各オブジェクト上で一連の個別の GRANT コマンドに展開されます。コンテナ内に現在存在するオブジェクトのみが影響を受けます。

    ただし、Snowflakeモデルでは、権限の一括付与は推奨されていないことに注意してください。代わりに、共有ロールを作成し、そのロールを使用して、ロールを付与されたすべてのユーザーが自動的にアクセスできるオブジェクトを作成することをお勧めします。

  • 管理アクセススキーマの場合:

    • オブジェクトの OWNERSHIP 権限は、スキーマ所有者の従属ロールにのみ転送できます。

  • ステージの場合:

    • USAGE 外部ステージにのみ適用されます。

    • READ | WRITE は内部ステージにのみ適用されます。さらに、内部ステージで WRITE 権限を付与するには、まずステージで READ 権限を付与する必要があります。

    外部ステージと内部ステージの詳細については、 CREATE STAGE をご参照ください。

  • 個々の UDF に権限を付与する場合、 ( udf名 ( [ 引数データ型 , ... ] ) の形式で) UDF の引数のデータ型を指定する必要があります(ある場合)。これは、Snowflakeは引数データ型を使用して、スキーマ内で同じ名前を持つ UDFs を解決するため必要です。例については、 (このトピック)をご参照ください。詳細については、 UDFsの概要 をご参照ください。

セキュリティ要件

個々のオブジェクトに対する権限の付与

一般に、オブジェクト所有者(つまり、オブジェクトに対する OWNERSHIP 権限を持つロール)または MANAGE GRANTS グローバル権限を持つロールは、オブジェクトに対する権限を他のロールに付与できます。

管理アクセススキーマ(つまり、 CREATE SCHEMA ... WITH MANAGED ACCESS 構文を使用して作成されたスキーマ)では、オブジェクトの所有者は付与決定の権限を消失します。スキーマの所有者(つまり、スキーマに対する OWNERSHIP 権限があるロール)または MANAGE GRANTS グローバル権限があるロールのみが、スキーマ内のオブジェクトに対する権限を付与できます。

指定された型の将来のオブジェクトに対する付与の定義

データベースレベル

データベースにある将来のオブジェクトの権限を付与または取り消すには、 MANAGE GRANTS グローバル権限が必要です。SECURITYADMIN および ACCOUNTADMIN システムロールのみが MANAGE GRANTS 権限を持っています。ただし、この権限はカスタムロールに付与できます。

スキーマレベル

管理アクセススキーマ(つまり、 CREATE SCHEMA ... WITH MANAGED ACCESS 構文を使用して作成されたスキーマ)では、スキーマの所有者(つまり、スキーマに対する OWNERSHIP 権限を持つロール)のみが、スキーマ内の将来のオブジェクトに対する権限を付与できます。

標準スキーマでは、スキーマにある将来のオブジェクトの権限を付与または取り消すには、 MANAGE GRANTS グローバル権限が必要です。

指定した型の将来のオブジェクトに対する付与の定義の詳細については、 データベースまたはスキーマオブジェクトに対する将来の付与 (このトピック内)をご参照ください。

データベースまたはスキーマオブジェクトに対する将来の許可

このセクションの注意事項は、スキーマまたはデータベース内のオブジェクトに将来の付与を割り当てるとき(すなわち、 ON FUTURE キーワードを使用する場合)に適用されます。

考慮事項

  • データベースレベルでオブジェクトに定義された将来の許可は、将来作成されるそのタイプのすべてのオブジェクトに適用されます。

  • 各オブジェクトタイプ(スキーマ、テーブル、ビュー、ストリームなど)に個別に将来の付与を定義する必要があります。

  • 将来の付与を使用して定義された権限は、オブジェクトの作成時に自動的に付与されます。

  • 将来の許可がデータベースレベルとスキーマレベルの両方で定義されている場合、スキーマレベルの許可はデータベースレベルの許可よりも優先され、データベースレベルの許可は無視されます。

  • 将来の許可は、新しいオブジェクトにのみ関係します。 GRANT <権限> ... TO ROLE コマンドを使用して、既存のオブジェクトのロールに目的の権限を明示的に付与する必要があります。

  • データベースレベルの将来の許可は、通常のアクセススキーマと管理アクセススキーマの両方に適用されます。

オブジェクトのクローニング

  • データベースが複製されると、複製されたデータベース内のスキーマは、ソーススキーマから将来の権限をコピーします。これにより、ソースオブジェクト(データベースなど)の許可はクローンにコピーされず、すべての子オブジェクト(データベース内のスキーマ)の付与がクローンにコピーされる通常のオブジェクト許可との一貫性が維持されます。

  • スキーマをクローンする場合、ソーススキーマからの将来の付与はクローンにコピーされません。

  • スキーマ内のオブジェクトのクローンが作成されると、クローン操作の CREATE <オブジェクト> ステートメントで COPY GRANTS オプションが指定されていない限り、スキーマ内のこのオブジェクトタイプに対して定義された将来の付与がクローンオブジェクトに適用されます。その場合、新しいオブジェクトは元のオブジェクトのアクセス許可を保持し、そのタイプのオブジェクトに対する将来の許可を継承 しません

限定/制限事項

  • 次の将来の付与はサポートされていません。

    • データ共有

    • データ複製

  • 将来の付与は、次の制限付きで名前付きステージでサポートされます。

    • READ 権限なしでは WRITE 権限を指定できません。

    • WRITE 権限が存在する場合、 READ 権限を取り消すことはできません。

    • 内部ステージでは、 READ または WRITE 権限を持つ将来の付与のみが具体化されます。

    • 外部ステージの場合、 USAGE 権限を持つ将来の付与のみが具体化されます。

  • テーブルの名前を変更または交換する場合、将来の付与は適用されません。

  • セキュリティ保護可能なオブジェクトタイプごとに、可能な OWNERSHIP 権限の将来の付与は1件のみです。

  • 管理アクセススキーマの場合:

    • オブジェクトに対する OWNERSHIP 権限の将来の付与は、スキーマ所有者の従属ロール(つまり、スキーマに対する OWNERSHIP 権限を持つロール)にのみ適用できます。

    • 管理アクセススキーマの所有権を別のロールに移す前に、 ON FUTURE キーワードを持つ REVOKE <権限> ... FROM ROLE を使用して、将来のすべての付与を取り消す必要があります。

report_wh ウェアハウスを操作(つまり、一時停止または再開)するために必要な権限を analyst ロールに付与します。

GRANT OPERATE ON WAREHOUSE report_wh TO ROLE analyst;

前の例と同じですが、 analyst ロールが他のロールに権限を付与することも許可します。

GRANT OPERATE ON WAREHOUSE report_wh TO ROLE analyst WITH GRANT OPTION;

mydb.myschema スキーマのすべての既存のテーブルに対するSELECT権限を analyst ロールに付与します。

GRANT SELECT ON ALL TABLES IN SCHEMA mydb.myschema to ROLE analyst;

mydb.myschema スキーマの2つのUDFsに対するすべての権限を analyst ロールに付与します。

GRANT ALL PRIVILEGES ON FUNCTION mydb.myschema.add5(number) TO ROLE analyst;

GRANT ALL PRIVILEGES ON FUNCTION mydb.myschema.add5(string) TO ROLE analyst;

UDFsには異なる引数があることに注意してください。引数は、Snowflakeが同じ名前のUDFsを一意に識別する方法です。 UDF 命名の詳細については、 UDFsの概要 をご参照ください。

指定されたスキーマに、マテリアライズドビューを作成する権限を付与します。

GRANT CREATE MATERIALIZED VIEW ON SCHEMA mydb.myschema TO ROLE myrole;

mydb.myschema スキーマで作成されたすべての 将来の テーブルに対する SELECT および INSERT 権限を role1 ロールに付与します。

GRANT SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema
TO ROLE role1;

mydb データベース内のすべての 将来の スキーマに対する USAGE 権限を role1 ロールに付与します。

use role accountadmin;

grant usage on future schemas in database mydb to role role1;