REVOKE <privileges> ... FROM APPLICATION¶
撤消应用程序对安全对象的一项或多项访问权限。可撤消的权限是特定于对象的。
有关角色和安全对象的更多详细信息,请参阅 访问控制概述。
语法¶
REVOKE { { globalPrivileges } ON ACCOUNT
| { accountObjectPrivileges | ALL [ PRIVILEGES ] } ON { USER | 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> }
| { schemaObjectPrivileges | ALL [ PRIVILEGES ] } ON { <object_type> <object_name> | ALL <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
}
FROM APPLICATION <name>
其中:
globalPrivileges ::=
{
CREATE {
COMPUTE POOL | DATABASE | WAREHOUSE
}
| BIND SERVICE ENDPOINT
| EXECUTE MANAGED TASK
| MANAGE WAREHOUSES
| READ SESSION
}
[ , ... ]
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
| CREATE {
ALERT | EXTERNAL TABLE | FILE FORMAT | FUNCTION
| IMAGE REPOSITORY | MATERIALIZED VIEW | PIPE | PROCEDURE
| { AGGREGATION | MASKING | PASSWORD | PROJECTION | ROW ACCESS | SESSION } POLICY
| SECRET | SEMANTIC VIEW | SEQUENCE | SERVICE | SNAPSHOT | STAGE | STREAM
| TAG | TABLE | TASK | VIEW
}
| MODIFY | MONITOR | USAGE
[ , ... ]
schemaObjectPrivileges ::=
-- For ALERT
{ MONITOR | OPERATE } [ , ... ]
-- For DYNAMIC TABLE
OPERATE, SELECT [ , ...]
-- For EVENT TABLE
{ INSERT | SELECT } [ , ... ]
-- For FILE FORMAT, FUNCTION (UDF or external function), PROCEDURE, SECRET, SEQUENCE, or SNAPSHOT
USAGE [ , ... ]
-- For IMAGE REPOSITORY
{ READ, WRITE } [ , ... ]
-- For PIPE
{ APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
-- For { MASKING | PACKAGES | PASSWORD | ROW ACCESS | SESSION } POLICY or TAG
APPLY [ , ... ]
-- For SECRET
READ, USAGE [ , ... ]
-- For SEMANTIC VIEW
REFERENCES [ , ... ]
-- For SERVICE
{ MONITOR | OPERATE } [ , ... ]
-- For external STAGE
USAGE [ , ... ]
-- For internal STAGE
READ [ , WRITE ] [ , ... ]
-- For STREAM
SELECT [ , ... ]
-- 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为架构级对象指定对象的类型。
ALERTDYNAMIC TABLEEVENT TABLEEXTERNAL TABLEFILE FORMATFUNCTIONMASKING POLICYMATERIALIZED VIEWNETWORK RULEPACKAGES POLICYPASSWORD POLICYPIPEPROCEDUREROW ACCESS POLICYSECRETSEMANTIC VIEWSESSION POLICYSEQUENCESTAGESTREAMTABLETAGTASKVIEW
object_type_pluralobject_type的复数形式(例如,TABLES、VIEWS)。不允许对管道进行批量授权。
name指定接收者应用程序(授予权限的角色)的标识符。
安全要求¶
- 撤消对单个对象的权限:
要撤消其他应用程序角色对某个对象的权限,您可以使用满足以下任一条件的 活动角色 或 更高级别的角色:
在 SHOW GRANTS 输出的 GRANTED_BY 列中,该角色被标识为权限的 授予者。
如果授予了对指定对象的多个权限实例,则仅会撤消由活跃授予者角色授予的实例。
该角色具有全局 MANAGE GRANTS 权限。
如果您有多个实例被授予指定对象的权限,则撤消 所有 实例。
请注意,默认情况下,只有 SECURITYADMIN 系统角色及更高级别的角色才具有 MANAGE GRANTS 权限;不过,可以将该权限授予自定义角色。
在托管访问架构(使用 CREATE SCHEMA ...WITH MANAGED ACCESS 语法创建的架构)中,只有架构所有者(具有对架构的 OWNERSHIP 权限的角色)、具有全局 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。有关更多详细信息,请参阅 用户定义的函数概述。授予对单个存储过程的权限时,必须以
procedure_name ( [ arg_data_type , ... ] )形式为存储过程的实参(如果有)指定数据类型。这是必需的,因为 Snowflake 使用实参数据类型来解析架构中具有相同名称的存储过程。有关更多信息,请参阅 托管访问架构。
示例¶
撤消应用程序对视图的 SELECT 权限:
REVOKE SELECT ON VIEW data.views.credit_usage
FROM APPLICATION app_snowflake_credits;