GRANT <権限>

セキュリティ保護可能なオブジェクトに対する1つ以上のアクセス権限をデータベースロールに付与します。付与できる権限はオブジェクト固有です。

セキュリティ保護可能なオブジェクトに対する権限を共有に付与する方法については、 GRANT <権限> ... TO SHARE をご参照ください。

ロール

ロールに付与できる権限は次のカテゴリに分類されます。

  • グローバル権限。

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

  • スキーマの権限。

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

データベースロール

データベースロールに付与できる権限は次のカテゴリに分類されます。

  • データベースロールを含むデータベースに対する権限。

  • データベースロールを含むデータベース内のスキーマに対する権限。

  • テーブル、ビュー、ステージ、ファイル形式、 UDFs、およびシーケンスなど、データベースロールを含むデータベースにあるスキーマオブジェクトの権限

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

バリエーション:

GRANT OWNERSHIPGRANT <権限> ... TO SHARE

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

REVOKE <権限>

構文

アカウントロール:

GRANT {  { globalPrivileges         | ALL [ PRIVILEGES ] } ON ACCOUNT
       | { accountObjectPrivileges  | ALL [ PRIVILEGES ] } ON { USER | RESOURCE MONITOR | WAREHOUSE | COMPUTE POOL | DATABASE | INTEGRATION | FAILOVER GROUP | REPLICATION GROUP | EXTERNAL VOLUME } <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 { DATABASE <db_name> | SCHEMA <schema_name> } }
       | { schemaObjectPrivileges   | ALL [ PRIVILEGES ] } ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
       | { classPrivileges          | ALL [ PRIVILEGES ] } ON CLASS <object_type> }
      }
  TO [ ROLE ] <role_name> [ WITH GRANT OPTION ]
Copy

データベースロール:

GRANT {  { CREATE SCHEMA| MODIFY | MONITOR | USAGE } [ , ... ] } ON DATABASE <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 { DATABASE <db_name> | SCHEMA <schema_name> } }
       | { schemaObjectPrivileges   | ALL [ PRIVILEGES ] } ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
      }
  TO DATABASE ROLE <database_role_name> [ WITH GRANT OPTION ]
Copy

条件:

globalPrivileges ::=
  {
      CREATE {
                ACCOUNT | COMPUTE POOL | DATA EXCHANGE LISTING | DATABASE | FAILOVER GROUP | INTEGRATION
                | NETWORK POLICY | EXTERNAL VOLUME | REPLICATION GROUP | ROLE | SHARE
                | USER | WAREHOUSE
      }
      | APPLY { { MASKING | PACKAGES | PASSWORD | ROW ACCESS | SESSION } POLICY | TAG }
      | ATTACH POLICY | AUDIT | BIND SERVICE ENDPOINT
      | EXECUTE { ALERT | TASK }
      | IMPORT SHARE
      | MANAGE { GRANTS | LISTING AUTO FULFILLMENT | WAREHOUSES }
      | MODIFY { LOG LEVEL | TRACE LEVEL | SESSION LOG LEVEL | SESSION TRACE LEVEL }
      | MONITOR { EXECUTION | SECURITY | USAGE }
      | OVERRIDE SHARE RESTRICTIONS | PURCHASE DATA EXCHANGE LISTING | RESOLVE ALL
  }
  [ , ... ]
Copy
accountObjectPrivileges ::=
-- For COMPUTE POOL
   { MODIFY | MONITOR | OPERATE | USAGE } [ , ... ]
-- For DATABASE
   { APPLYBUDGET | CREATE { DATABASE ROLE | SCHEMA } | IMPORTED PRIVILEGES | MODIFY | MONITOR | USAGE } [ , ... ]
-- For EXTERNAL VOLUME
   { USAGE } [ , ... ]
-- For FAILOVER GROUP
   { FAILOVER | MODIFY | MONITOR | REPLICATE } [ , ... ]
-- For INTEGRATION
   { USAGE | USE_ANY_ROLE } [ , ... ]
-- For REPLICATION GROUP
   { MODIFY | MONITOR | REPLICATE } [ , ... ]
-- For RESOURCE MONITOR
   { MODIFY | MONITOR } [ , ... ]
-- For USER
   { MONITOR } [ , ... ]
-- For WAREHOUSE
   { APPLYBUDGET | MODIFY | MONITOR | USAGE | OPERATE } [ , ... ]
Copy
schemaPrivileges ::=
ADD SEARCH OPTIMIZATION
| APPLYBUDGET

| CREATE {
      ALERT | DYNAMIC TABLE | EXTERNAL TABLE | FILE FORMAT | FUNCTION | IMAGE REPOSITORY |
      | ICEBERG TABLE | MATERIALIZED VIEW | NETWORK RULE | PIPE | PROCEDURE
      | { MASKING | PACKAGES | PASSWORD | ROW ACCESS | SESSION } POLICY | SERVICE
      | SECRET | SEQUENCE | STAGE | STREAM | STREAMLIT
      | SNOWFLAKE.CORE.BUDGET |
      | SNOWFLAKE.ML.ANOMALY_DETECTION | SNOWFLAKE.ML.FORECAST
      | TAG | TABLE | TASK | VIEW
   }
| MODIFY | MONITOR | USAGE
[ , ... ]
Copy
schemaObjectPrivileges ::=
  -- For ALERT
     { MONITOR | OPERATE } [ , ... ]
  -- For DYNAMIC TABLE
     OPERATE, SELECT [ , ...]
  -- For EVENT TABLE
     { INSERT | SELECT } [ , ... ]
  -- For FILE FORMAT, FUNCTION (UDF or external function), PROCEDURE, SECRET, or SEQUENCE
     USAGE [ , ... ]
  -- For IMAGE REPOSITORY
     { READ, WRITE } [ , ... ]
  -- For ICEBERG TABLE
     { APPLYBUDGET | DELETE | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
  -- For PIPE
     { APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
  -- For { MASKING | PACKAGES | PASSWORD | ROW ACCESS | SESSION } POLICY or TAG
     APPLY [ , ... ]
  -- For SECRET
     READ, USAGE [ , ... ]
  -- For SERVICE
     { USAGE | MONITOR | OPERATE } [ , ... ]
  -- For external STAGE
     USAGE [ , ... ]
  -- For internal STAGE
     READ [ , WRITE ] [ , ... ]
  -- For STREAM
     SELECT [ , ... ]
  -- For STREAMLIT
     USAGE [ , ... ]
  -- For TABLE
     { APPLYBUDGET | DELETE | EVOLVE SCHEMA | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
  -- For TAG
     READ
  -- For TASK
     { APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
  -- For VIEW
     { REFERENCES | SELECT } [ , ... ]
  -- For MATERIALIZED VIEW
     { APPLYBUDGET | REFERENCES | SELECT } [ , ... ]
Copy

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

必須パラメーター

object_name

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

object_type

スキーマレベルオブジェクトの型を指定します。

  • ALERT

  • DYNAMIC TABLE

  • EVENT TABLE

  • EXTERNAL TABLE

  • FILE FORMAT

  • FUNCTION

  • IMAGE REPOSITORY

  • ICEBERG TABLE

  • MASKING POLICY

  • MATERIALIZED VIEW

  • NETWORK RULE

  • PACKAGES POLICY

  • PASSWORD POLICY

  • PIPE

  • PROCEDURE

  • ROW ACCESS POLICY

  • SECRET

  • SERVICE

  • SESSION POLICY

  • SEQUENCE

  • STAGE

  • STREAM

  • TABLE

  • TAG

  • TASK

  • VIEW

object_type_plural

object_type の複数形(例: TABLESVIEWS)。

パイプへの一括付与は許可されていないことに注意してください。

role_name

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

database_role_name

受信者データベースロール(つまり、権限が付与されるロール)の識別子を指定します。識別子が db_name.database_role_name の形式で完全修飾されていない場合、コマンドはセッションの現在のデータベースでデータベースロールを検索します。

すべての権限は、データベースロールを含むデータベースと、同じデータベース内の他のオブジェクトに限定されます。

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

FUTURE

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

WITH GRANT OPTION

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

デフォルト: 値なし。つまり、受信者ロールは他のロールに権限を付与できません。

注釈

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

使用上の注意

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

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

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

  • データベースの場合、 IMPORTED PRIVILEGES 権限は共有データベース(共有から作成されたデータベース)にのみ適用されます。詳細については、 共有データの消費 をご参照ください。IMPORTED PRIVILEGES 権限はデータベースロールに付与できないことに注意してください。

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

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

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

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

  • ステージの場合:

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

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

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

  • 個々の UDF またはストアドプロシージャに権限を付与する場合は、以下に示す構文を使用して、引数のデータ型を指定する必要があります(存在する場合)。

    <udf_or_stored_procedure_name> ( [ <arg_data_type> [ , ... ] ] )
    
    Copy

    Snowflakeでは、スキーマ内で同じ名前を持つ UDFs またはストアドプロシージャを解決するために引数データ型を使用します。詳細については、 プロシージャおよび関数のオーバーロード をご参照ください。

アクセス制御の要件

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

一般に、次の権限セットのいずれかを持つロールは、オブジェクトに対する権限を他のロールに付与できます。

  • MANAGE GRANTS グローバル権限。

    SECURITYADMIN および ACCOUNTADMIN システムロールのみが MANAGE GRANTS 権限を持っています。ただし、この権限はカスタムロールに付与できます。

  • オブジェクトに対する OWNERSHIP 権限。スキーマオブジェクト(例: テーブルやビュー)に対する権限を付与する場合、ロールには、親データベースとスキーマに対する USAGE 権限も必要です。

  • GRANT <権限> ... TO ROLE ステートメントに含まれる WITH GRANT OPTION パラメーターを使用してロールに権限が付与された場合、そのロールは他のロールに同じ権限を付与できます。

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

MANAGE GRANTS グローバル権限を保持するロールは、現在の(付与者)ロールに追加の権限を付与できることに注意してください。

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

データベースレベル

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

スキーマレベル

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

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

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

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

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

詳細については、 管理アクセススキーマ をご参照ください。

考慮事項

  • 同じデータベースで、データベースとスキーマのために将来の付与が 同じオブジェクト型で 定義される場合、スキーマレベルの付与はデータベースレベルの付与よりも優先され、データベースレベルの付与は無視されます。この動作は、1つまたは別のロールに付与された将来のオブジェクトに対する権限に適用されます。

    たとえば、次のステートメントは、データベースレベルとスキーマレベルで同じ型のオブジェクトに対して異なる権限を付与します。

    データベース d1 内にあるすべての将来のスキーマに対する SELECT 権限をロール r1 に付与します。

    GRANT SELECT ON FUTURE TABLES IN DATABASE d1 TO ROLE r1;
    
    Copy

    d1.s1 スキーマ内にあるすべての将来のテーブルに対する INSERT および DELETE 権限をロール r2 に付与します。

    GRANT INSERT,DELETE ON FUTURE TABLES IN SCHEMA d1.s1 TO ROLE r2;
    
    Copy

    r1 ロールに割り当てられた将来の付与は完全に無視されます。スキーマ d1.s1 に新しいテーブルが作成されると、 r2 ロールのテーブルに対して定義された将来の権限のみが付与されます。

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

制限と制約

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

  • 次の型のオブジェクトでは、将来の付与を定義できません。

    • コンピューティングプール

    • 外部関数

    • イメージリポジトリ

    • ポリシーオブジェクト:

      • マスキングポリシー

      • パッケージポリシー

      • 行アクセスポリシー

      • セッションポリシー

    • タグ

  • データベース内の指定されたタイプのオブジェクトに対する OWNERSHIP 権限の今後の付与は、管理アクセススキーマ内の新しいオブジェクトには適用 されません

  • 次の制限は、管理アクセススキーマ内のオブジェクトに対する今後の付与に適用されます。

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

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

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

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

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

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

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

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

ロール

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

GRANT OPERATE ON WAREHOUSE report_wh TO ROLE analyst;
Copy

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

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

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

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

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;
Copy

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

mydb.myschema スキーマのストアドプロシージャに対する使用権限を analyst ロールに付与します。

GRANT USAGE ON PROCEDURE mydb.myschema.myprocedure(number) TO ROLE analyst;
Copy

ストアドプロシージャ名(UDF 名など)はオーバーロードされる可能性があるため、引数のデータ型を指定する必要があることに注意してください。名前のオーバーロードの詳細については、 プロシージャおよび関数のオーバーロード をご参照ください。

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

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

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

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

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

use role accountadmin;

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

データベースロール

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

GRANT SELECT ON ALL TABLES IN SCHEMA mydb.myschema
  TO DATABASE ROLE mydb.dr1;
Copy

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

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

GRANT ALL PRIVILEGES ON FUNCTION mydb.myschema.add5(string)
  TO DATABASE ROLE mydb.dr1;
Copy

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

mydb.myschema スキーマのストアドプロシージャに対する使用権限を mydb.dr1 データベースロールに付与します。

GRANT USAGE ON PROCEDURE mydb.myschema.myprocedure(number)
  TO DATABASE ROLE mydb.dr1;
Copy

ストアドプロシージャ名(UDF 名など)はオーバーロードされる可能性があるため、引数のデータ型を指定する必要があることに注意してください。ストアドプロシージャの詳細については、 プロシージャおよび関数のオーバーロード をご参照ください。

指定されたスキーマ内にマテリアライズドビューを作成する権限を mydb.dr1 データベースロールに付与します。

GRANT CREATE MATERIALIZED VIEW ON SCHEMA mydb.myschema
  TO DATABASE ROLE mydb.dr1;
Copy

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

GRANT SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema
  TO DATABASE ROLE mydb.dr1;
Copy

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

USE ROLE ACCOUNTADMIN;

GRANT USAGE ON FUTURE SCHEMAS IN DATABASE mydb
  TO DATABASE ROLE mydb.dr1;
Copy