动态表访问控制¶
本主题讨论对动态表执行创建、查询、更改、查看和删除等操作所需的权限。
如需有关 Snowflake 权限模型的更多信息,请参阅 访问控制概述 和 访问控制权限。
转移所有权¶
要让用户完全访问动态表,可以执行以下任一操作:
分配授予时,请确保将对象类型指定为 DYNAMIC TABLE,因为动态表具有与常规表不同的权限集。
要授予动态表的 OWNERSHIP 权限,请确保接收角色在以下对象上具有 USAGE 权限。否则,后续的计划刷新将失败。
包含动态表的数据库和架构。
用于刷新表的仓库。
要转移动态表的所有权,您可以使用 GRANT OWNERSHIP 命令或 Snowsight。
以下示例使用 GRANT OWNERSHIP 命令将 my_dynamic_table 的所有权权限授予 budget_admin 角色。
GRANT OWNERSHIP ON DYNAMIC TABLE my_dynamic_table TO ROLE budget_admin;
以下示例使用 GRANT OWNERSHIP 命令将所有权权限授予 budget_admin 角色,该权限适用于在 mydb.myschema 架构中创建的所有未来动态表。
GRANT OWNERSHIP ON FUTURE DYNAMIC TABLES IN SCHEMA mydb.myschema TO ROLE budget_admin;
登录 Snowsight。
在导航菜单中,选择 Transformation » Dynamic tables。
选择要转移所有权的角色。
使用特定用户权限和次要角色来刷新动态表¶
除了任务所有者角色的权限外,动态表还可以配置为使用特定用户的权限运行。指定 EXECUTE AS USER 的动态表以指定用户的身份(而非系统用户)运行。
例如,您可以授予用户一个主要角色以访问表,以及一个次要角色以访问虚拟仓库。然后,用户可以创建一个动态表,使用两个角色的组合权限进行操作,从而简化权限管理并增强数据操作的灵活性。
虽然 EXECUTE AS USER 选项允许在用户角色下刷新动态表,对这些动态表的所有其他操作都遵循标准权限模型。
关键用例¶
管理多角色权限: 在用户具有次要角色的情况下,用户可以使用其主要角色和次要角色的组合权限创建和刷新动态表。此配置可确保刷新动态表的用户具有访问所有必需资源所需的权限,同时保持与现有基于角色的访问控制的一致性。
精细的安全和治理控制: 用户可以使用其他选项配置可选的安全措施,例如 REQUIRE USER,除非指定了用户,否则动态表无法运行。
所有操作的可追溯性: 所有在 EXECUTE AS USER 动态表上的刷新都将归属于配置的用户,而非 SYSTEM 用户。这种归属机制有助于为所有操作维护清晰的审计追踪记录。
访问控制¶
动态表的所属角色必须被授予对 EXECUTE AS USER 指定用户的 IMPERSONATE 权限,且该指定用户必须被授予任务的所属角色。如果 IMPERSONATE 权限被撤销,动态表刷新将失败,动态表可能会 自动暂停。
当动态表刷新时,刷新会话的主要角色是动态表的所有者角色,用户的默认次要角色将被激活。用户将能够使用 USE ROLE 命令切换主要角色,并使用 USE SECONDARY ROLES 命令在刷新会话中调整次要角色。
跨产品注意事项¶
数据掩码和行访问策略: 策略 – 例如,使用 CURRENT_USER() – 根据指定的用户和角色而不是 SYSTEM 用户来进行评估。
复制和故障转移: 将用户名和角色名称复制到次要部署。
如果用户或角色在次要部署中不可用,则该用户将被标记为 INVALID,而且在修复之前,刷新将失败。
如果其余角色提供足够的权限,则在执行期间将跳过无效的次要角色。
示例¶
配置动态表以用户身份运行刷新¶
以下示例创建了一个以指定用户身份执行刷新的动态表,并将主要角色设置为动态表的所有者角色。使用用户设置的任意用户沿袭参数执行刷新。
如果未显式指定次要角色的选项,则默认刷新为用户的当前会话设置。
CREATE DYNAMIC TABLE my_dynamic_table
[ EXECUTE AS USER my_user_name
[ USE SECONDARY ROLES { ALL | NONE | (<role1>, <role2>, ... ) } ]
]
为现有动态表设置次要角色¶
以下示例将动态表配置为以指定用户身份执行。 如果未选择特定的次要角色,则刷新流程默认用于当前会话的活跃次要角色。如果动态表已设置为以特定用户身份执行,则此命令将更新配置,以执行 ALTER DYNAMIC TABLE 命令的用户身份执行该表。
执行此命令需要动态表的 OWNERSHIP 权限。
ALTER DYNAMIC TABLE my_dynamic_table SET
EXECUTE AS USER my_user_name
[ USE SECONDARY ROLES { ALL | NONE | (<role1>, <role2>, ... ) } ]
切换动态表,以 SYSTEM 用户的身份执行¶
以下示例将动态表恢复为由使用动态表的所有者角色的 SYSTEM 用户执行。
执行此命令需要动态表的 OWNERSHIP 权限。
ALTER DYNAMIC TABLE my_dynamic_table UNSET EXECUTE AS USER;
创建动态表的权限¶
要创建动态表,必须使用具有以下权限的角色:
权限 |
对象 |
|---|---|
CREATE DYNAMIC TABLE |
计划在其中创建动态表的架构。 |
SELECT |
计划为新动态表查询的现有表和视图。 |
USAGE |
计划用于新动态表的数据库和架构。 计划用于刷新表的仓库。 备注 虽然您可以使用具有 USAGE 权限的辅助角色执行 |
要创建依赖于另一个动态表的动态表,必须使用具有以下权限的角色:
权限 |
对象 |
|---|---|
SELECT |
创建新的动态表时计划查询的动态表。 |
OPERATE |
新动态表依赖的所有上游动态表。只有在创建动态表时设置为同步刷新时才需要。 |
查询动态表的权限¶
要查询动态表,可以使用具有 创建动态表权限 的角色。对于用户(例如数据分析师)只需查询动态表的情况,可使用具有以下权限的角色:
权限 |
对象 |
|---|---|
USAGE |
包含动态表的数据库和架构。 用于运行查询的仓库。 |
SELECT |
查询的动态表。 |
更改动态表的权限¶
要更改动态表,必须使用拥有该动态表的 OWNERSHIP 或 OPERATE 权限的角色。
如果拥有动态表的 OPERATE 权限,可以使用 ALTER DYNAMIC TABLE 命令执行以下操作:
使用 ALTER ... <label-alter_dynamic_table_suspend_resume>。
使用 ALTER ...RESUME。
使用 ALTER ...REFRESH。
使用 ALTER ...SET。
如果您拥有动态表的 OWNERSHIP 权限,则除了上面列出的操作外,还可以执行以下操作:
使用 ALTER ... SET | UNSET COMMENT 设置或取消注释。
使用 ALTER ... RENAME TO 重命名动态表。
使用 ALTER ... SWAP WITH 将动态表与另一个动态表交换
使用 ALTER ... SET 设置新参数
指定或移除群集密钥。请参阅 群集操作 (clusteringAction)。
更改治理政策。请参阅 数据治理策略和标签操作 (dataGovnPolicyTagAction)。
更改搜索优化。请参阅 搜索优化操作 (searchOptimizationAction)。
查看动态表元数据的权限¶
要查看元数据,必须使用具有该动态表 MONITOR 权限的角色。
对于用户只需要查看动态表的元数据和 Information Schema 的情况(例如,数据科学家持有的角色),请使用对该动态表具有 MONITOR 权限的角色。虽然 OPERATE 权限授予了这一访问权限,但它也包括更改动态表的功能,因此 MONITOR 更适合用户不需要更改动态表的情况。
如果拥有动态表的 MONITOR 权限,则可以执行以下操作:
使用 DESCRIBE DYNAMIC TABLE 命令和 Snowsight 动态表详细信息页面查看动态表的具体详细信息。如果只拥有动态表的 SELECT 权限,则以下字段会隐藏:
text、warehouse、scheduling_state、last_suspended_on和suspend_reason_code(仅限 UI)。使用 SHOW DYNAMIC TABLES 命令查看可以访问哪些动态表。
调用 DYNAMIC_TABLE_GRAPH_HISTORY 表函数,查看图表历史记录。
调用 DYNAMIC_TABLE_REFRESH_HISTORY 表函数,查看刷新历史记录。
删除动态表的权限¶
要删除动态表,必须使用具有该动态表 OWNERSHIP 权限的角色。
使用双仓库的权限¶
使用 INITIALIZATION_WAREHOUSE 所需的所有权限要求与 WAREHOUSE 相同。
操作 |
权限 |
|---|---|
使用 INITIALIZATION_WAREHOUSE 的 CREATE DYNAMIC TABLE |
两个数据仓库的 CREATE DYNAMIC TABLE 和 USAGE,即 WAREHOUSE 和 INITIALIZATION_WAREHOUSE。 |
ALTER DYNAMIC TABLE ... SET / UNSET INITIALIZATION_WAREHOUSE |
动态表的 OWNERSHIP 或 OPERATE,以及适用仓库的 USAGE。 |
使用 INITIALIZATION_WAREHOUSE 的动态表的 ALTER DYNAMIC TABLE ... REFRESH |
动态表的 OPERATE,以及适用仓库的 USAGE。 |
有关更多信息,请参阅 了解动态表的仓库使用情况。
