REVOKE <privileges>

从角色或数据库角色中移除对安全对象的一项或多项权限。可撤消的权限是特定于对象的。

角色:

可以从角色撤消的权限分为以下几类:

  • 全局权限

  • 对账户对象(资源监视器、虚拟仓库和数据库)的权限

  • 对架构的权限

  • 对架构对象(表、视图、暂存区、文件格式、UDFs 和序列)的权限

数据库角色:

可以从数据库角色撤消的权限分为以下几类:

  • 对包含数据库角色的数据库的权限。

  • 对包含数据库角色的数据库中架构的权限。

  • 对包含数据库角色的数据库中架构对象(表、视图、暂存区、文件格式、UDFs 和序列)的权限。

另请参阅:

GRANT <privileges>GRANT OWNERSHIP

REVOKE <privilege> ...FROM SHARE

语法

账户角色:

REVOKE [ GRANT OPTION FOR ]
    {
       { globalPrivileges         | ALL [ PRIVILEGES ] } ON ACCOUNT
     | { accountObjectPrivileges  | ALL [ PRIVILEGES ] } ON { RESOURCE MONITOR | WAREHOUSE | COMPUTE POOL | DATABASE | INTEGRATION | CONNECTION | 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 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 | COMPUTE POOL | DATABASE | INTEGRATION | 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 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 | COMPUTE POOL | DATA EXCHANGE LISTING | DATABASE | FAILOVER GROUP | INTEGRATION
       | NETWORK POLICY | EXTERNAL VOLUME | REPLICATION GROUP | ROLE | SHARE
       | USER | WAREHOUSE
      }
      | ATTACH POLICY | AUDIT | BIND SERVICE ENDPOINT
      | APPLY {
         { AGGREGATION | AUTHENTICATION | MASKING | PACKAGES | PASSWORD
           | PROJECTION | ROW ACCESS | SESSION } POLICY
         | TAG }
      | EXECUTE { ALERT | DATA METRIC FUNCTION | MANAGED ALERT | MANAGED TASK | TASK }
      | IMPORT SHARE
      | MANAGE { ACCOUNT SUPPORT CASES | GRANTS | LISTING AUTO FULFILLMENT | ORGANIZATION SUPPORT CASES | USER SUPPORT CASES | 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 CONNECTION
   { FAILOVER } [ , ... ]
-- 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 | FILE FORMAT | FUNCTION | GIT REPOSITORY | IMAGE REPOSITORY | MODEL
      | NETWORK RULE | PIPE | PROCEDURE
      | { AGGREGATION | AUTHENTICATION | MASKING | PACKAGES
          | PASSWORD | PROJECTION | ROW ACCESS | SESSION } POLICY
      | SECRET | SEQUENCE | SERVICE | SNAPSHOT | STAGE | STREAM | STREAMLIT
      | SNOWFLAKE.CORE.BUDGET
      | SNOWFLAKE.ML.ANOMALY_DETECTION | SNOWFLAKE.ML.FORECAST
      | [ { DYNAMIC | EXTERNAL | HYBRID | ICEBERG } ] TABLE
      | TAG | TASK
      | [ MATERIALIZED ] VIEW
   }
   | MODIFY | MONITOR | USAGE
   [ , ... ]
Copy
schemaObjectPrivileges ::=
  -- For ALERT
     { MONITOR | OPERATE } [ , ... ]
  -- For DATA METRIC FUNCTION
     USAGE [ , ... ]
  -- For DYNAMIC TABLE
     MONITOR, OPERATE, SELECT [ , ...]
  -- For EVENT TABLE
     { INSERT | SELECT | TRUNCATE } [ , ... ]
  -- For FILE FORMAT, FUNCTION (UDF or external function), MODEL, PROCEDURE, SECRET, SEQUENCE, or SNAPSHOT
     USAGE [ , ... ]
  -- For GIT REPOSITORY
     { READ, WRITE } [ , ... ]
  -- For HYBRID TABLE
     { INSERT | SELECT | UPDATE } [ , ... ]
  -- For IMAGE REPOSITORY
     { READ, WRITE } [ , ... ]
  -- For ICEBERG TABLE
     { APPLYBUDGET | DELETE | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
  -- For PIPE
     { APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
  -- For { AGGREGATION | AUTHENTICATION | MASKING | PACKAGES | PASSWORD | PROJECTION | ROW ACCESS | SESSION } POLICY or TAG
     APPLY [ , ... ]
  -- For SECRET
     READ, USAGE [ , ... ]
  -- For SERVICE
     { 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

为架构级对象指定对象的类型。

  • AGGREGATION POLICY

  • ALERT

  • AUTHENTICATION POLICY

  • DATA METRIC FUNCTION

  • DYNAMIC TABLE

  • EVENT TABLE

  • EXTERNAL TABLE

  • FILE FORMAT

  • FUNCTION

  • GIT REPOSITORY

  • HYBRID TABLE

  • IMAGE REPOSITORY

  • ICEBERG TABLE

  • MASKING POLICY

  • MATERIALIZED VIEW

  • MODEL

  • NETWORK RULE

  • PACKAGES POLICY

  • PASSWORD POLICY

  • PIPE

  • PROCEDURE

  • PROJECTION POLICY

  • ROW ACCESS POLICY

  • SECRET

  • SERVICE

  • SESSION POLICY

  • SEQUENCE

  • SNAPSHOT

  • STAGE

  • STREAM

  • TABLE

  • TAG

  • 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 权限才能撤消对架构中未来对象的权限。

使用说明

  • 不能直接对任何类授予或撤销权限。但是,您可以创建类的实例,并从账户角色撤销 实例角色。撤销架构的 CREATE <class_name> 权限,以防止角色创建类的实例。

  • 不同的授予者可以将一个权限多次授予一个角色。REVOKE <privilege> 语句仅撤消由活跃角色或层次结构中级别较低的角色作为授予者的授予。其他授予者对指定权限的任何额外授予都会被忽略。

    另请注意,即使没有撤消任何权限,REVOKE <privilege> 语句也会成功。REVOKE <privilege> 语句仅在以下情况下返回错误:指定的权限具有依赖性的授予,并且在该语句中省略了 CASCADE 子句。

  • 可以在单个 GRANT 语句中为同一对象类型指定多个权限(每个权限用逗号分隔),或者可以使用特殊的 ALL [ PRIVILEGES ] 关键字将所有适用的权限授予指定的对象类型。但请注意,实际上只有执行 GRANT 命令的角色所拥有和可授予的权限才会被授予目标角色。对于任何无法授予的权限,将返回一条警告消息。

    不得为标签指定此关键字。

  • 以下角色会自动继承已授予特定角色的权限:获授予该角色的任何其他角色,以及角色层次结构中任何其他更高级别的角色。有关更多详细信息,请参阅 访问控制概述

  • 对于数据库,IMPORTED PRIVILEGES 权限仅适用于共享数据库(即从共享创建的数据库)。有关更多详细信息,请参阅 使用共享数据

  • 对于架构和架构中的对象,提供了一个选项来授予对容器(即数据库或架构)内所有相同类型对象的权限。这是一个方便的选项;在内部,该命令扩展为针对每个对象的一系列单独 GRANT 命令。只有容器中当前存在的对象会受到影响。

    但请注意,在 Snowflake 模型中,不建议批量授予权限。相反,Snowflake 建议创建一个共享角色,并使用该角色创建可供所有被授予该角色的用户自动访问的对象。

  • 对于暂存区:

    • USAGE 仅适用于外部暂存区。

    • READ | WRITE 仅适用于内部暂存区。此外,要授予对内部暂存区的 WRITE 权限,必须先授予对暂存区的 READ 权限。

    有关外部和内部暂存区的更多详细信息,请参阅 CREATE STAGE

  • 授予对单个 UDF 的权限时,必须以 udf_name ( [ arg_data_type , ... ] ) 形式为 UDF 的实参(如果有)指定数据类型。这是必需的,因为 Snowflake 使用实参数据类型来解析架构中具有相同名称的 UDFs。有关示例,请参阅 ` 示例 _ (本主题内容)。有关更多详细信息,请参阅 :doc:/developer-guide/udf/udf-overview`。

  • 授予对单个存储过程的权限时,必须以 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 角色中,撤消对两个 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 角色中,撤消对两个存储过程(在当前架构中具有相同的名称)的所有权限:

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

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

请注意,这两个存储过程具有不同的实参,这就是 Snowflake 唯一标识具有相同名称的过程的方式。

role1 角色中,撤消已授予的 SELECT 和 INSERT 权限,这两项权限适用于在 mydb.myschema 架构中创建的所有 :emph:` 未来 ` 表:

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 数据库角色中,撤消对两个 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 数据库角色中,撤消对两个存储过程(在当前架构中具有相同的名称)的所有权限:

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

请注意,这两个存储过程具有不同的实参,这就是 Snowflake 唯一标识具有相同名称的过程的方式。

mydb.dr1 数据库角色中,撤消已授予的 SELECT 和 INSERT 权限,这两项权限适用于在 mydb.myschema 架构中创建的所有 :emph:` 未来 ` 表:

REVOKE SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema
  FROM DATABASE ROLE mydb.dr1;
Copy
语言: 中文