Snowflake转移TASK所有权丢失AFTER依赖如何无需手动恢复
Snowflake转移任务所有权保留依赖关系的解决方案
问题根因
Snowflake默认执行GRANT OWNERSHIP时会撤销该对象上所有已授予其他角色的权限,而任务依赖关系生效的前提是下游任务的所有者必须持有上游任务的OPERATE或更高权限。单独转移TASK1所有权时,原有权限被回收,TASK2的所有者失去TASK1的访问权限,系统就自动移除了TASK2的AFTER依赖配置。
解决方法
执行所有权转移语句时添加COPY CURRENT GRANTS参数,保留该对象上的现有权限配置,即可避免依赖丢失:
场景1:仅转移上游任务TASK1的所有权给ROLE1
直接执行带参数的授权语句即可:
grant ownership on task TASK1 to role ROLE1 copy current grants;
场景2:需同时转移TASK1、TASK2的所有权给ROLE1
按照从上游到下游的顺序依次转移,所有授权语句都添加COPY CURRENT GRANTS:
-- 先转上游任务TASK1 grant ownership on task TASK1 to role ROLE1 copy current grants; -- 再转下游任务TASK2 grant ownership on task TASK2 to role ROLE1 copy current grants;
如果是更长的多级任务依赖链,也遵循同样规则:从最上游的根任务开始,按依赖顺序依次向下转移,每条转移语句都添加COPY CURRENT GRANTS即可自动保留所有依赖关系,无需手动修复。
验证方式
转移完成后可执行以下语句查询TASK1的下游依赖是否正常保留:
SELECT * FROM TABLE(INFORMATION_SCHEMA.TASK_DEPENDENTS(TASK_NAME => 'TASK1', RECURSIVE => FALSE));
内容的提问来源于stack exchange,提问作者Sarde
相关产品推荐
相关产品推荐

