PieCloudDB:同角色用户如何避免互改对方创建的SQL视图?
解决方法:实现PieCloudDB用户间视图隔离
核心结论
不需要给user1、user2单独创建角色,利用PieCloudDB的权限体系,通过调整默认权限和已有视图权限就能实现需求。
具体操作
1. 配置共享Schema的默认权限
先给共享Schema设置默认权限,让新创建的视图只有创建者能编辑/删除,同角色的其他用户仅能只读(如果不需要互相查看可以跳过只读权限设置)。用超级用户或拥有Schema管理权限的账号执行:
-- 撤销ROLE1在共享Schema上的默认修改、删除权限 ALTER DEFAULT PRIVILEGES IN SCHEMA 你的共享Schema名 FOR ROLE ROLE1 REVOKE ALL ON TABLES FROM ROLE1; -- 可选:给ROLE1内用户授予默认只读权限,允许互相查看视图 ALTER DEFAULT PRIVILEGES IN SCHEMA 你的共享Schema名 FOR ROLE ROLE1 GRANT SELECT ON TABLES TO ROLE1; -- 确保视图创建者自身拥有完整权限(默认已有,但明确设置更稳妥) ALTER DEFAULT PRIVILEGES IN SCHEMA 你的共享Schema名 FOR ROLE ROLE1 GRANT ALL ON TABLES TO CURRENT_USER;
2. 修正已存在的视图权限
如果之前已经有user1、user2创建的视图,手动调整这些视图的权限:
-- 以user1创建的view1为例,收回user2的修改/删除权限 REVOKE ALL ON 你的共享Schema名.view1 FROM user2; -- 可选:给user2添加只读权限 GRANT SELECT ON 你的共享Schema名.view1 TO user2; -- 同理处理user2创建的view2 REVOKE ALL ON 你的共享Schema名.view2 FROM user1; GRANT SELECT ON 你的共享Schema名.view2 TO user1;
3. 验证效果
分别用user1、user2登录测试:
- user1尝试删除user2的视图,会提示权限不足
- user2尝试修改user1的视图,同样会报错
关于独立角色的疑问
完全没必要创建独立角色。现有ROLE1已经能满足“共享创建视图”的基础需求,额外创建角色只会增加权限管理的工作量,除非后续有更细分的权限要求,否则不用多此一举。
内容的提问来源于stack exchange,提问作者heihei Li
相关产品推荐
相关产品推荐

