カテゴリ:

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

REVOKE <権限> ... FROM ROLE

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

  • グローバル権限。

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

  • スキーマの権限。

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

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

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

GRANT <権限> ... TO ROLEGRANT OWNERSHIP

REVOKE <権限> ... 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 {
               ACCOUNT | DATA EXCHANGE LISTING | DATABASE | INTEGRATION
               | NETWORK POLICY | ROLE | SHARE | USER | WAREHOUSE
     }
     | APPLY MASKING POLICY | APPLY ROW ACCESS POLICY | APPLY SESSION POLICY | ATTACH POLICY
     | EXECUTE TASK | IMPORT SHARE | MANAGE GRANTS | MONITOR { EXECUTION | USAGE } | OVERRIDE SHARE RESTRICTIONS
  }
  [ , ... ]
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 | ROW ACCESS POLICY | SESSION POLICY
                 | TAG | SEQUENCE | FUNCTION | PROCEDURE | FILE FORMAT | STAGE | PIPE | STREAM | TASK
              }
     | ADD SEARCH OPTIMIZATION
  }
  [ , ... ]
schemaObjectPrivileges ::=
-- For TABLE
  { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES } [ , ... ]
-- For VIEW
  { SELECT | REFERENCES } [ , ... ]
-- For MATERIALIZED VIEW
  { SELECT | REFERENCES } [ , ... ]
-- For SEQUENCE, FUNCTION (UDF or external function), PROCEDURE, or FILE FORMAT
    USAGE
-- For internal STAGE
    READ [ , WRITE ]
-- For external STAGE
    USAGE
-- For PIPE
   { MONITOR | OPERATE } [ , ... ]
-- For STREAM
    SELECT
-- For TASK
   { MONITOR | OPERATE } [ , ... ]
-- For MASKING POLICY
    APPLY
-- For ROW ACCESS POLICY
    APPLY
-- For TAG
    APPLY

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

必須パラメーター

object_name

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

object_type

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

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

object_type_plural

object_type の複数形(例: TABLESVIEWS)。

role_name

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

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

GRANT OPTION FOR

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

デフォルト:値なし

ON FUTURE

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

RESTRICT | CASCADE

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

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

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

デフォルト: RESTRICT

セキュリティ要件

個々のオブジェクトに対する権限の取り消し

次の基準のいずれかを満たす アクティブなロール、または より上位のロール を使用して、オブジェクトに対する権限を他のロールから取り消すことができます。

  • ロールは、 SHOW GRANTS 出力の GRANTED_BY 列で権限の 付与者 として識別されます。

    指定されたオブジェクトに対して権限の複数のインスタンスが付与されている場合は、アクティブな付与者ロールによって付与されたインスタンスのみが取り消されます。

  • ロールには MANAGE GRANTS グローバル権限があります。

    指定されたオブジェクトに対して権限の複数のインスタンスが付与されている場合は、 すべて のインスタンスが取り消されます。

    SECURITYADMIN 以上のシステムロールのみがデフォルトで MANAGE GRANTS 権限を持っていることに注意してください。ただし、この権限はカスタムロールに付与できます。

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

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

データベースレベル

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

スキーマレベル

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

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

使用上の注意

  • 権限は、異なる付与者によってロールに複数回付与できます。REVOKE <権限> ステートメントは、アクティブなロールまたは階層内の下位のロールが付与者である付与のみを取り消します。他の付与者による指定された権限の追加の付与は無視されます。

    また、権限が取り消されなくても、 REVOKE <権限> ステートメントは成功することに注意してください。REVOKE <権限> ステートメントは、指定された権限に依存する付与があり、ステートメントで CASCADE 句が省略されている場合にのみエラーを返します。

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

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

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

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

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

  • ステージの場合、

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

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

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

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

  • 個々のストアドプロシージャに権限を付与する場合は、 procedure_name ( [ arg_data_type , ... ] ) の形式でプロシージャの引数のデータ型を指定する必要があります。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;
最上部に戻る