Snowflake为角色授予Schema未来OWNERSHIP权限时报错
问题解决:未来表OWNERSHIP权限重复报错
排查方向
- 权限继承的隐藏记录:直接查询目标角色
RL_DEV的未来权限没结果,但该角色可能继承了其他角色的同类未来OWNERSHIP权限。用以下SQL排查所有相关权限:SELECT * FROM TABLE(INFORMATION_SCHEMA.APPLICABLE_ROLES(ROLE_NAME => 'RL_DEV')) JOIN INFORMATION_SCHEMA.FUTURE_GRANTS ON GRANTEE = APPLICABLE_ROLE_NAME WHERE OBJECT_TYPE = 'TABLE' AND PRIVILEGE = 'OWNERSHIP' AND SCHEMA_NAME = 'CON' AND DATABASE_NAME = 'DEV'; - 元数据同步延迟:Snowflake元数据偶尔会有缓存延迟,执行刷新后再查询:
ALTER SESSION REFRESH; SELECT * FROM INFORMATION_SCHEMA.FUTURE_GRANTS WHERE GRANTEE = 'RL_DEV' AND OBJECT_TYPE = 'TABLE' AND PRIVILEGE = 'OWNERSHIP' AND SCHEMA_NAME = 'CON' AND DATABASE_NAME = 'DEV';
解决步骤
- 删除重复权限:如果上述查询找到重复记录,执行撤销命令(替换
[找到的角色名]为实际角色):
注意:若权限来自继承角色,需确认撤销后不会影响其他业务。REVOKE OWNERSHIP ON FUTURE TABLES IN SCHEMA dev.con FROM ROLE [找到的角色名]; - 重新执行授权:删除重复权限后,再次运行你的授权命令:
GRANT OWNERSHIP ON FUTURE TABLES IN SCHEMA dev.con TO ROLE RL_DEV; - 限定授权范围(可选):如果不需要全Schema的未来表所有权,可添加更精确的条件避免冲突:
GRANT OWNERSHIP ON FUTURE TABLES IN SCHEMA dev.con TO ROLE RL_DEV WITH GRANT OPTION; -- 按需添加该选项
关键注意点
OWNERSHIP权限是排他性的,同一Schema下同一对象类型的未来OWNERSHIP只能授予一个角色(或通过继承链传递),必须确保没有其他角色持有该权限。
内容的提问来源于stack exchange,提问作者BalajiAWS
相关产品推荐
相关产品推荐

