GRANT <privileges> ...TO APPLICATION ROLE¶
向应用程序角色授予对安全架构级对象的一项或多项访问权限。可以授予的权限是特定于对象的。
有关角色和安全对象的更多详细信息,请参阅 访问控制概述。
语法¶
GRANT {
{ schemaPrivileges | ALL [ PRIVILEGES ] } ON SCHEMA <schema_name>
| { schemaObjectPrivileges | ALL [ PRIVILEGES ] } ON { <object_type> <object_name> | ALL <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
| { schemaObjectPrivileges | ALL [ PRIVILEGES ] } ON FUTURE <object_type_plural> IN SCHEMA <schema_name>
}
TO APPLICATION ROLE <name> [ WITH GRANT OPTION ]
其中:
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 | 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 { AGGREGATION | 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 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
为架构级对象指定对象的类型。
ALERT
DYNAMIC TABLE
EVENT TABLE
EXTERNAL TABLE
FILE FORMAT
FUNCTION
MASKING POLICY
MATERIALIZED VIEW
NETWORK RULE
PACKAGES POLICY
PASSWORD POLICY
PIPE
PROCEDURE
ROW ACCESS POLICY
SECRET
SESSION POLICY
SEQUENCE
STAGE
STREAM
TABLE
TAG
TASK
VIEW
object_type_plural
object_type
的复数形式(例如,TABLES
、VIEWS
)。请注意,不允许对管道进行批量授权。
name
指定收件人应用程序角色(即授予权限的角色)的标识符。
可选参数¶
ON FUTURE
指定对指定类型的新(即未来)架构对象授予权限,而不是对现有对象授予权限。可以随时使用带有 ON FUTURE 关键字的 REVOKE <privileges> FROM APPLICATION ROLE 撤消未来授权;所授予的对现有对象的所有权限都将保留。有关未来授权的更多信息,请参阅本主题内容中的 对架构对象的未来授权。
WITH GRANT OPTION
如果指定,则允许收件人应用程序角色向其他应用程序角色授予权限。
默认:无值,这意味着收件人应用程序角色无法向其他应用程序角色授予权限。
备注
WITH GRANT OPTION 子句不支持 IMPORTED PRIVILEGES 权限。有关更多信息,请参阅 授予导入数据库的权限。
使用说明¶
必须使用应用程序角色授予和撤消对应用程序中对象的权限。
根据您是应用程序提供商还是使用者,此命令有不同的限制。
应用程序使用者 不能对应用程序角色执行以下操作:
授予或撤消与应用程序角色相关的对象权限。
向数据库或共享授予应用程序角色,或从数据库或共享中撤消应用程序角色。
向同一应用程序或不同的应用程序授予应用程序角色,或撤消同一应用程序或不同应用程序的应用程序角色。
这些项目将 应用程序提供商 应用于应用程序角色。
要将架构中指定类型的对象或所有对象的 OWNERSHIP 权限授予应用程序角色,将对象的所有权从一个应用程序角色转移到另一个应用程序角色,请使用 GRANT OWNERSHIP 命令。
可以在单个 GRANT 语句中为同一对象类型指定多个权限,每个权限用逗号分隔。
然而,只有由执行 GRANT 命令的应用程序角色持有和可授权的权限才被实际授权给目标应用程序角色。对于任何无法授予的权限,将返回一条警告消息。
授予特定应用程序角色的权限将由授予该应用程序角色的任何其他应用程序角色以及角色层次结构中的任何其他更高级别的应用程序角色自动继承。
有关更多详细信息,请参阅 访问控制概述。
在托管访问架构中:
对对象的 OWNERSHIP 权限只能转让给架构所有者的下级角色。
对于暂存区:
USAGE 仅适用于外部暂存区。
READ
WRITE 仅适用于内部暂存区。此外,要授予对内部暂存区的 WRITE 权限,必须先授予对暂存区的 READ 权限。
有关外部和内部暂存区的更多详细信息,请参阅 CREATE STAGE 和 ` 访问控制要求 `_ (本主题内容)。
授予对单个 UDF 或存储过程的权限时,必须使用如下所示的语法指定实参的数据类型(如果有):
<udf_or_stored_procedure_name> ( [ <arg_data_type> [ , ... ] ] )
Snowflake 使用实参数据类型来解析架构中具有相同名称的 UDFs 和存储过程。有关更多信息,请参阅 重载过程和函数。
访问控制要求¶
此命令只能在应用程序内部执行。
只能授予或撤消对应用程序拥有的对象的权限。要确定这些对象,请使用 SHOW OBJECTS 命令:
SHOW OBJECTS OWNED BY APPLICATION myapp;
关于托管访问架构:
在托管访问架构(即使用 CREATE SCHEMA ...WITH MANAGED ACCESS 语法创建的架构)中,对象所有者无法做出授权决策。
以下角色可以授予对托管访问架构中对象的权限:
应用程序角色,因为该角色是架构所有者(即拥有架构 OWNERSHIP 权限的角色)。
继承应用程序角色的角色。
具有全局 MANAGE GRANTS 权限的角色可以授予架构中对象的权限。
拥有全局 MANAGE GRANTS 权限的角色可以授予当前(授予者)角色附加权限。
有关托管访问架构中未来授权的访问控制要求,请参阅 ` 对架构对象的未来授权 `_ (本主题内容)。
对架构对象的未来授权¶
当对架构中的对象分配未来授权时(即使用 ON FUTURE 关键字时),这些部分中的备注适用。
注意事项¶
当对架构的 同一对象类型 定义未来授权时,架构级授权优先于数据库级授权,而数据库级授权被忽略。此行为适用于授予一个应用程序角色或不同应用程序角色的未来对象的权限。
约束与限制¶
最多允许一次对每种安全对象类型的 OWNERSHIP 权限的未来授权。
无法对以下类型的对象定义未来授权:
计算池
外部函数
镜像仓库
策略对象:
聚合策略
掩码策略
包策略
投影策略
行访问策略
会话策略
快照
标签
对数据库中指定类型对象的 OWNERSHIP 权限的未来授权 不 适用于托管访问架构中的新对象。
以下限制适用于对托管访问架构中对象的未来授权:
对对象的 OWNERSHIP 权限的未来授权只能应用于架构所有者的下级角色(即具有对架构的 OWNERSHIP 权限的角色)。
在将托管访问架构的所有权转移给其他角色之前,必须使用 REVOKE <privileges> 和 ON FUTURE 关键字撤消所有未批准的未来授予的 OWNERSHIP 权限。
重命名或交换表时,未来授权不适用。
支持对指定暂存区的未来授权,但有以下限制:
如果没有 READ 权限,则无法指定 WRITE 权限。
如果 READ 权限存在,则无法撤消 WRITE 权限。
对于内部暂存区,只有具有 READ 或 WRITE 权限的未来授权才能物化。
对于外部暂存区,只有具有 USAGE 权限的未来授权才能物化。
在托管访问架构中,应用程序角色和具有全局 MANAGE GRANTS 权限的角色可以授予托管访问架构中未来对象的权限。
在标准架构中,需要全局 MANAGE GRANTS 权限才能授予对架构中未来对象的权限。
示例¶
将对视图的 SELECT 权限授予应用程序角色:
GRANT SELECT ON VIEW data.views.credit_usage
TO APPLICATION ROLE app_snowflake_credits;