Snowflake中撤销共享数据库角色IMPORTED PRIVILEGES失效问题
Snowflake共享库权限撤销失效问题解决
可能的触发原因
- 共享库默认给PUBLIC开了权限:这个有问题的共享库可能被提供者设置了
GRANT IMPORTED PRIVILEGES TO PUBLIC,而新创建的角色默认都会继承PUBLIC的权限,所以单独撤销角色的权限根本没用——权限是从PUBLIC那继承来的。 - 角色继承链藏了权限:你的新角色可能继承了其他父角色,而那个父角色本身就有这个共享库的权限,导致你撤销当前角色权限后,父角色的权限还在生效。
- 元数据缓存延迟(概率低):虽然语句显示成功,但Snowflake的元数据偶尔会有缓存,不过这种情况一般几分钟内就会刷新,要是过了很久权限还没变,基本可以排除这个原因。
具体解决步骤
检查共享库的PUBLIC权限
先查一下这个共享库是不是给PUBLIC开了导入权限:SHOW GRANTS ON DATABASE <你的共享库名称>;如果结果里有
GRANT IMPORTED PRIVILEGES ON DATABASE <共享库名称> TO ROLE PUBLIC;这条记录,先把PUBLIC的权限撤掉(业务允许的前提下):REVOKE IMPORTED PRIVILEGES ON DATABASE <共享库名称> FROM ROLE PUBLIC;然后再对目标角色执行撤销操作:
REVOKE IMPORTED PRIVILEGES ON DATABASE <共享库名称> FROM ROLE <你的新角色名称>;排查角色继承关系
看看你的新角色有没有继承其他带权限的父角色:SHOW GRANTS OF ROLE <你的新角色名称>;如果发现某个父角色拥有该共享库的权限,要么撤销父角色的对应权限,要么把这个父角色从新角色的继承链里去掉:
ALTER ROLE <你的新角色名称> DROP ROLE <父角色名称>;验证权限是否生效
执行下面的语句确认权限已经被撤销:SHOW GRANTS TO ROLE <你的新角色名称>;或者直接用这个角色尝试访问共享库,确认是否无法正常操作。
内容的提问来源于stack exchange,提问作者Blazen
相关产品推荐
相关产品推荐

