REVOKE <privileges>¶
从角色或数据库角色中移除对安全对象的一项或多项权限。可撤消的权限是特定于对象的。
- 角色:
可以从角色撤消的权限分为以下几类:
全局权限
对账户对象(资源监视器、虚拟仓库和数据库)的权限
对架构的权限
对架构对象(表、视图、暂存区、文件格式、UDFs 和序列)的权限
- 数据库角色:
可以从数据库角色撤消的权限分为以下几类:
对包含数据库角色的数据库的权限。
对包含数据库角色的数据库中架构的权限。
对包含数据库角色的数据库中架构对象(表、视图、暂存区、文件格式、UDFs 和序列)的权限。
语法¶
账户角色:
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 ]
数据库角色:
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 ]
其中:
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
}
[ , ... ]
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 } [ , ... ]
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
[ , ... ]
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 } [ , ... ]
有关每种对象类型支持的权限的更多详细信息,请参阅 访问控制权限。
必填参数¶
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
的复数形式(例如,TABLES
、VIEWS
)。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;
从 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
角色中,撤消对两个 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 命名的更多详细信息,请参阅 用户定义函数概述。
从 analyst
角色中,撤消对两个存储过程(在当前架构中具有相同的名称)的所有权限:
REVOKE ALL PRIVILEGES ON PROCEDURE clean_schema(string) FROM ROLE analyst; REVOKE ALL PRIVILEGES ON procedure clean_schema(string, string) FROM ROLE analyst;请注意,这两个存储过程具有不同的实参,这就是 Snowflake 唯一标识具有相同名称的过程的方式。
从 role1
角色中,撤消已授予的 SELECT 和 INSERT 权限,这两项权限适用于在 mydb.myschema
架构中创建的所有 :emph:` 未来 ` 表:
REVOKE SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema FROM ROLE role1;
数据库角色¶
从 mydb.dr1
数据库角色中,撤消对 mydb.myschema
架构中所有现有表的 SELECT 权限:
REVOKE SELECT ON ALL TABLES IN SCHEMA mydb.myschema FROM DATABASE ROLE mydb.dr1;
从 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;请注意,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;请注意,这两个存储过程具有不同的实参,这就是 Snowflake 唯一标识具有相同名称的过程的方式。
从 mydb.dr1
数据库角色中,撤消已授予的 SELECT 和 INSERT 权限,这两项权限适用于在 mydb.myschema
架构中创建的所有 :emph:` 未来 ` 表:
REVOKE SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema FROM DATABASE ROLE mydb.dr1;