REVOKE <権限>

セキュリティ保護可能なオブジェクトの1つ以上の権限をロールまたはデータベースロールから削除します。取り消すことができる権限はオブジェクト固有です。

ロール

ロールから取り消すことができる権限は次のカテゴリに分類されます。

  • グローバル権限

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

  • スキーマの権限

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

データベースロール

データベースロールから取り消すことができる権限は次のカテゴリに分類されます。

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

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

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

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

GRANT <権限>GRANT 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 ]
Copy

データベースロール:

REVOKE [ GRANT OPTION FOR ]
    {
       { CREATE SCHEMA | MODIFY | MONITOR | USAGE } [ , ... ] } ON DATABASE <object_name>
       { 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 DATABASE ROLE <database_role_name> [ RESTRICT | CASCADE ]
Copy

条件:

globalPrivileges ::=
  {
     CREATE {
               ACCOUNT | DATA EXCHANGE LISTING | DATABASE | INTEGRATION
               | NETWORK POLICY | ROLE | SHARE | USER | WAREHOUSE
     }
     | APPLY MASKING POLICY | APPLY PASSWORD POLICY | APPLY ROW ACCESS POLICY | APPLY SESSION POLICY | ATTACH POLICY
     | EXECUTE ALERT | EXECUTE TASK | IMPORT SHARE | MANAGE GRANTS | MONITOR { EXECUTION | USAGE } | OVERRIDE SHARE RESTRICTIONS
  }
  [ , ... ]
Copy
accountObjectPrivileges ::=
-- For RESOURCE MONITOR
  { MODIFY | MONITOR } [ , ... ]
-- For WAREHOUSE
  { MODIFY | MONITOR | USAGE | OPERATE } [ , ... ]
-- For DATABASE
  { CREATE { DATABASE ROLE | SCHEMA } | IMPORTED PRIVILEGES | MODIFY | MONITOR | USAGE } [ , ... ]
-- For INTEGRATION
  { USAGE | USE_ANY_ROLE } [ , ... ]
Copy
schemaPrivileges ::=
  {
     MODIFY | MONITOR | USAGE
     | CREATE {
                 ALERT | EXTERNAL TABLE | FILE FORMAT | FUNCTION | MASKING POLICY |
                 MATERIALIZED VIEW | PASSWORD POLICY | PIPE | PROCEDURE | ROW ACCESS POLICY |
                 SECRET | SESSION POLICY | SEQUENCE | STAGE | STREAM | TAG | TABLE | TASK | VIEW
              }
     | ADD SEARCH OPTIMIZATION
  }
  [ , ... ]
Copy
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 PASSWORD POLICY
    APPLY
-- For ROW ACCESS POLICY
    APPLY
-- For TAG
    APPLY
-- For ALERT
    OPERATE
-- For SECRET
    USAGE
Copy

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

必須パラメーター

object_name

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

object_type

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

ALERT | EXTERNAL TABLE | FILE FORMAT | FUNCTION | MASKING POLICY | MATERIALIZED VIEW | PASSWORD POLICY | POLICY | PIPE | PROCEDURE | ROW ACCESS POLICY | SESSION POLICY | SEQUENCE | STAGE | STREAM | TABLE | TASK | VIEW

object_type_plural

object_type の複数形(例: TABLESVIEWS)。

role_name

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

database_role_name

受信者データベースロール(つまり、権限が取り消されるロール)の識別子を指定します。識別子が完全修飾されていない場合(db_name.database_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 コマンドを実行するロールが保持および付与できる権限のみが実際にターゲットロールに付与されることに注意してください。付与できなかった権限については、警告メッセージが返されます。

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

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

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

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

  • ステージの場合、

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

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

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

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

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

  • 将来の付与: 将来の付与を取り消すと、指定された型の 将来 のオブジェクトに対する権限の付与のみがドロップされます。既存のオブジェクトに付与された権限は保持されます。

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

ロール

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

REVOKE OPERATE ON WAREHOUSE report_wh FROM ROLE analyst;
Copy

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

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

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

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

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

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

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

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

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

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

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

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

データベースロール

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

REVOKE SELECT ON ALL TABLES IN SCHEMA mydb.myschema
  FROM DATABASE ROLE mydb.dr1;
Copy

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

REVOKE ALL PRIVILEGES ON FUNCTION add5(number)
  FROM DATABASE ROLE mydb.dr1;

REVOKE ALL PRIVILEGES ON FUNCTION add5(string)
  FROM DATABASE ROLE mydb.dr1;
Copy

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

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

REVOKE ALL PRIVILEGES ON PROCEDURE clean_schema(string)
  FROM DATABASE ROLE mydb.dr1;

REVOKE ALL PRIVILEGES ON procedure clean_schema(string, string)
  FROM DATABASE ROLE mydb.dr1;
Copy

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

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

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