Snowflake同角色用户视图权限隔离方案咨询
解决方案:无需单独创建角色,通过所有权控制实现需求
在Snowflake中,你遇到的问题核心是对象所有权的归属:默认情况下,用ROLE1创建的视图所有权属于ROLE1,因此所有拥有ROLE1权限的用户都能修改/删除该视图。要阻止user1和user2互相操作对方的视图,只需调整所有权配置即可,无需为每位用户单独创建角色。
具体实现步骤:
1. 显式指定视图所有权为创建用户
创建视图时,通过参数将所有权设置为当前执行创建操作的用户,而非ROLE1:
CREATE VIEW shared_schema.your_view_name OWNERSHIP = CURRENT_USER AS SELECT ...; -- 替换为你的视图查询逻辑
配置后,user1创建的视图所有权归user1,user2创建的视图所有权归user2,只有所有者能对自己的视图执行ALTER、DROP等操作。
2. 配置角色默认所有权(可选,简化操作)
如果不想让用户每次创建视图都手动添加OWNERSHIP参数,可以修改ROLE1的默认对象所有权规则,让该角色下的用户创建的所有对象自动归属本人:
ALTER ROLE ROLE1 SET DEFAULT_OBJECT_OWNERSHIP = CURRENT_USER;
执行该命令后,后续用ROLE1创建的视图、表等对象,所有权都会自动分配给创建者。
3. 校验并限制ROLE1的权限范围
确认ROLE1仅拥有共享Schema上的CREATE VIEW权限,无需额外授予ALTER VIEW或DROP VIEW的全局权限——用户对自己拥有的对象天然具备完全控制权,对他人的对象则无操作权限。
权限检查命令
SHOW GRANTS ON SCHEMA shared_schema;
确保ROLE1的权限仅包含CREATE VIEW即可。
内容的提问来源于stack exchange,提问作者Rick A
相关产品推荐
相关产品推荐

