GRANT <privileges> ... TO USER

向用户授予对安全对象的一项或多项访问权限。可以授予的权限是特定于对象的。

有关角色和安全对象的更多信息,请参阅 访问控制概述

有关权限的更多信息,请参阅 访问控制权限

另请参阅:

GRANT <privileges> ... TO ROLEREVOKE <privileges> ... FROM 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 ]
Copy

其中:

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
  }
  [ , ... ]
Copy
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 } [ , ... ]
Copy
schemaPrivileges ::=

    ADD SEARCH OPTIMIZATION | APPLYBUDGET
   | MODIFY | MONITOR | USAGE
   [ , ... ]
Copy
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 } [ , ... ]
Copy

有关每种对象类型支持的权限的更多信息,请参阅 访问控制权限

必填参数

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 的复数形式(例如 TABLESVIEWS)。

请注意,不允许对管道进行批量授权。

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;
Copy

要向特定用户 user1 授予对过程的 USAGE 权限,请执行以下操作:

GRANT USAGE ON PROCEDURE mydb.myschema.myprocedure(number) TO USER user1;
Copy
语言: 中文