カテゴリ:

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

REVOKE <権限> ... FROM ROLE

セキュリティ保護可能なオブジェクトの1つ以上の権限をロールから削除します。取り消すことができる権限はオブジェクト固有であり、次のカテゴリに分類されます。

  • グローバル権限。

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

  • スキーマの権限。

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

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

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

GRANT <権限> ... TO ROLEGRANT OWNERSHIP

REVOKE <privilege> ...FROM SHARE

このトピックの内容:

構文

REVOKE [ GRANT OPTION FOR ]
    {
       { 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> }
    }
  FROM [ ROLE ] <role_name> [ RESTRICT | CASCADE ]

条件:

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 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 | FUNCTION | PROCEDURE | SEQUENCE } } [ , ... ]
schemaObjectPrivileges ::=
-- For TABLE
  { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES } [ , ... ]
-- For VIEW
    SELECT
-- 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)。

ロール名

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

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

GRANT OPTION FOR

指定した場合、受信者のロールが別のロールに権限を付与する機能を削除します。

デフォルト:値なし

ON FUTURE

指定した場合、既存のオブジェクトではなく、指定したタイプの新しい(将来の)スキーマオブジェクト(テーブルやビューなど)に付与された権限のみを削除します。既存のオブジェクトに付与された権限はすべて保持されることに注意してください。

RESTRICT | CASCADE

指定した場合、権限が別のロールに再付与されたかどうかに基づいて、権限の取り消し操作が成功するか失敗するかを決定します。

  • RESTRICT :取り消される権限が別のロールに再付与された場合、 REVOKE コマンドは失敗します。

  • CASCADE :取り消される権限が再度付与された場合、 REVOKE コマンドはこれらの依存する付与を再帰的に取り消します。オブジェクトに対する同じ権限が別の付与者によってターゲットロールに付与されている場合(並列付与)、その付与は影響を受けず、ターゲットロールはその権限を保持します。

デフォルト: RESTRICT

セキュリティ要件

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

一般に、オブジェクト所有者(つまり、オブジェクトに対する 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 グローバル権限が必要です。

使用上の注意

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

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

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

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

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

  • ステージの場合、

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

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

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

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

  • 個々のストアドプロシージャに権限を付与する場合、 プロシージャ名 ( [ 引数データ型 , ... ] ) の形式でプロシージャの引数のデータ型を指定する必要があります。Snowflakeでは、引数データ型を使用してスキーマ内で同じ名前を持つストアドプロシージャを解決するため、これが必要です。

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

REVOKE OPERATE ON WAREHOUSE report_wh FROM ROLE analyst;

analyst ロールから report_wh ウェアハウスのOPERATE権限の 付与オプション のみを取り消します。ロールはOPERATE権限を保持しますが、ウェアハウスに対するOPERATE権限を他のロールに付与できなくなります。

REVOKE GRANT OPTION FOR OPERATE ON WAREHOUSE report_wh FROM ROLE analyst;

analyst ロールから mydb.myschema スキーマにある既存のテーブルすべてのSELECT権限を取り消します。

REVOKE SELECT ON ALL TABLES IN SCHEMA mydb.myschema from ROLE analyst;

analyst ロールから、2つの UDFs (現在のスキーマと同じ名前)に関するすべての権限を取り消します。

REVOKE ALL PRIVILEGES ON FUNCTION add5(number) FROM ROLE analyst;

REVOKE ALL PRIVILEGES ON FUNCTION add5(string) FROM ROLE analyst;

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

analyst ロールから(現在のスキーマと同じ名前の)2つのストアドプロシージャに対するすべての権限を取り消します。

REVOKE ALL PRIVILEGES ON PROCEDURE clean_schema(string) FROM ROLE analyst;

REVOKE ALL PRIVILEGES ON procedure clean_schema(string, string) FROM ROLE analyst;

2つのストアドプロシージャの引数が異なることに注意してください。これは、Snowflakeが同じ名前のプロシージャを一意に識別する方法です。

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

REVOKE SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema
FROM ROLE role1;