GRANT <privileges> ... TO USER¶
向用户授予对安全对象的一项或多项访问权限。可以授予的权限是特定于对象的。
有关角色和安全对象的更多信息,请参阅 访问控制概述。
有关权限的更多信息,请参阅 访问控制权限。
语法¶
GRANT { { globalPrivileges | ALL [ PRIVILEGES ] } 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> } }
}
TO [ USER ] <user_name> [ WITH GRANT OPTION ]
其中:
globalPrivileges ::=
{
| ATTACH POLICY | AUDIT | BIND SERVICE ENDPOINT
| APPLY {
{ AGGREGATION | AUTHENTICATION | JOIN | 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 | EVENT SHARING | 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
| READ SESSION
}
[ , ... ]
accountObjectPrivileges ::=
-- For COMPUTE POOL
{ MODIFY | MONITOR | OPERATE | USAGE } [ , ... ]
-- For CONNECTION
{ FAILOVER } [ , ... ]
-- For DATABASE
{ APPLYBUDGET
| 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
| MODIFY | MONITOR | USAGE
[ , ... ]
schemaObjectPrivileges ::=
-- For ALERT
{ MONITOR | OPERATE } [ , ... ]
-- For DATA METRIC FUNCTION
USAGE [ , ... ]
-- For DYNAMIC TABLE
MONITOR, OPERATE, SELECT [ , ...]
-- For EVENT TABLE
{ APPLYBUDGET | DELETE | REFERENCES | 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
{ APPLYBUDGET | DELETE | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
-- For IMAGE REPOSITORY
{ READ, WRITE } [ , ... ]
-- For ICEBERG TABLE
{ APPLYBUDGET | DELETE | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
-- For MATERIALIZED VIEW
{ APPLYBUDGET | REFERENCES | SELECT } [ , ... ]
-- For PIPE
{ APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
-- For { AGGREGATION | AUTHENTICATION | MASKING | JOIN | PACKAGES | PASSWORD | PRIVACY | PROJECTION | 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 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 } [ , ... ]
有关每种对象类型支持的权限的更多信息,请参阅 访问控制权限。
必填参数¶
object_name
为授予权限的对象指定标识符。
object_type
为架构级对象指定对象的类型。
AGGREGATION POLICY
ALERT
AUTHENTICATION POLICY
CORTEX SEARCH SERVICE
DATA METRIC FUNCTION
DATASET
DYNAMIC TABLE
EVENT TABLE
EXTERNAL TABLE
FILE FORMAT
FUNCTION
GIT REPOSITORY
IMAGE REPOSITORY
ICEBERG TABLE
JOIN POLICY
MASKING POLICY
MATERIALIZED VIEW
MODEL
MODEL MONITOR
NETWORK RULE
NOTEBOOK
PACKAGES POLICY
PASSWORD POLICY
PIPE
PRIVACY POLICY
PROCEDURE
PROJECTION POLICY
ROW ACCESS POLICY
SECRET
SEMANTIC VIEW
SERVICE
SESSION POLICY
SEQUENCE
SNAPSHOT
STAGE
STREAM
STREAMLIT
TABLE
TAG
TASK
VIEW
object_type_plural
object_type
的复数形式(例如TABLES
、VIEWS
)。请注意,不允许对管道进行批量授权。
user_name
指定接收者用户(被授予权限的用户)的标识符。
可选参数¶
WITH GRANT OPTION
如果已指定,则允许接收者用户向其他角色或用户授予权限。
默认值:无值,这意味着接收者角色无法向其他角色或用户授予权限。
备注
WITH GRANT OPTION 参数不支持 IMPORTED PRIVILEGES 权限。有关更多信息,请参阅 授予导入数据库的权限。
使用说明¶
直接分配给用户的权限仅在用户启用了所有次要角色时才有效。
直接向用户授予权限可能会增加您账户中授权的泛滥。在非点对点共享的场景中,我们建议您向角色授予权限,以管理用户在 Snowflake 中所需的访问权限。
未来授权 不可用。
无法向用户授予 CREATE 和 OWNERSHIP 权限。
不能直接对任何类授予或撤销权限。
在单个 GRANT 语句中可以为同一对象类型指定多个权限(每个权限用逗号分隔)。或者,特殊
ALL [ PRIVILEGES ]
关键字可用于向指定对象类型授予所有适用权限。备注
实际上只有执行 GRANT 命令的用户所拥有和可授予的权限才会授予给目标角色。对于未授予的任何权限,将返回一条警告消息。
您不能为标签指定
ALL [ PRIVILEGES ]
。如果您尝试授予对 架构 的
ALL [ PRIVILEGES ]
权限,则ALL [ PRIVILEGES ]
不会授予对 类 的权限。
对于架构和架构中的对象,提供了
ALL object_type_plural IN container
选项来授予对容器(即数据库或架构)内所有相同类型对象的权限。此选项提供了便利。在内部,该命令扩展为针对每个对象的一系列单独的 GRANT 命令。此选项仅影响容器中当前存在的对象。备注
在 Snowflake 模型中,不建议批量授予权限。相反,Snowflake 建议创建一个共享角色,然后使用该角色创建可供所有被授予该角色的用户自动访问的对象。
您无法指定 ALL TAGS 或 ALL MASKING POLICIES。
对于暂存区:
USAGE 仅适用于外部暂存区。
READ | WRITE 仅适用于内部暂存区。此外,要授予对内部暂存区的 WRITE 权限,必须先授予对暂存区的 READ 权限。
有关外部和内部暂存区的更多信息,请参阅 CREATE STAGE。
授予对单个 UDF 或存储过程的权限时,必须使用
udf_or_stored_procedure_name ( [ arg_data_type [ , ... ] ] )
等语法为实参(如果有)指定数据类型。Snowflake 使用实参数据类型来解析架构中具有相同名称的 UDFs 或存储过程。有关更多信息,请参阅 重载过程和函数。对于动态表,接收用户必须被授予对包含动态表的数据库和架构以及用于刷新表的仓库的 USAGE 权限。有关更多信息,请参阅 动态表访问控制。
授予对单个 UDF 的权限时,必须使用
udf_name ( [ arg_data_type , ... ] )
等语法形式为 UDF 的实参(如果有)指定数据类型。这是必需的,因为 Snowflake 使用实参数据类型来解析架构中具有相同名称的 UDFs。有关更多信息,请参阅 用户定义的函数概述。授予对单个存储过程的权限时,必须使用
procedure_name ( [ arg_data_type , ... ] )
等语法为过程的实参(如果有)指定数据类型。这是必需的,因为 Snowflake 使用实参数据类型来解析架构中具有相同名称的存储过程。有关更多信息,请参阅 托管访问架构。
访问控制要求¶
- 授予对单个对象的权限:
通常,具有以下任何一组权限的角色或用户可以向其他角色授予对对象的权限:
全局
MANAGE GRANTS
权限。只有 SECURITYADMIN 和 ACCOUNTADMIN 系统角色具有 MANAGE GRANTS 权限;但是,可以向自定义角色或用户授予该权限。
OWNERSHIP 权限。
对对象具有 OWNERSHIP 权限的角色。
USAGE 权限。授予对架构对象(例如,表和视图)的权限时,角色或用户还必须对父数据库和架构具有 USAGE 权限。
如果已使用
GRANT privileges ... TO USER WITH GRANT OPTION
命令向用户授予权限,则该用户可以向其他用户或角色重新授予相同的权限。在 托管访问架构 <label-managed_access_schemas>`(使用 :samp:`CREATE SCHEMA ... WITH MANAGED ACCESS 创建的架构)语法中,对象所有者无法做出授权决策。仅架构所有者(即对架构拥有 OWNERSHIP 权限的角色)或具有全局 MANAGE GRANTS 权限的角色可以授予对架构中对象的权限。
备注
拥有全局 MANAGE GRANTS 权限的角色可以授予当前(授予者)角色或用户附加权限。
示例¶
要向特定用户 joe
授予 Streamlit 应用程序的 USAGE 权限,请执行以下操作:
GRANT USAGE ON STREAMLIT streamlit_db.streamlit_schema.streamlit_app TO USER joe;
要向特定用户 user1
授予对过程的 USAGE 权限,请执行以下操作:
GRANT USAGE ON PROCEDURE mydb.myschema.myprocedure(number) TO USER user1;