PostgreSQL中能否创建仅拥有视图查看权限的角色
结论
PostgreSQL完全支持创建仅具备视图查询权限的角色,具体实现步骤如下:
1 创建专用角色
根据是否需要允许直接登录调整创建语句参数:
-- 允许直接登录的角色示例 CREATE ROLE view_only_role WITH LOGIN PASSWORD '自定义安全密码'; -- 若仅用于权限继承、不需要直接登录,可去掉WITH LOGIN参数
2 授予Schema访问权限
需要先开放视图所属Schema的USAGE权限,角色才能访问Schema下的对象,以默认public Schema为例:
GRANT USAGE ON SCHEMA public TO view_only_role;
如果视图存放在自定义Schema中,替换语句中的public为对应Schema名称即可,多Schema场景下需逐个Schema授权。
3 授予视图查询权限
根据需求选择对应授权方式:
- 仅给指定的单个/多个视图授予查询权限
GRANT SELECT ON 视图名1, 视图名2 TO view_only_role;
- 批量授予当前Schema下所有已存在视图的查询权限
GRANT SELECT ON ALL VIEWS IN SCHEMA public TO view_only_role;
- 配置自动授权规则,后续在该Schema下新建的视图会自动给该角色开放查询权限
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON VIEWS TO view_only_role;
权限验证说明
切换到view_only_role角色后,仅可查询已授权的视图数据,访问任意未授权的表、视图时都会返回权限不足报错,完全符合需求。
补充说明:PostgreSQL的权限逻辑和Oracle一致,不需要给该角色授予视图依赖的底层基础表任何权限,只要视图的所有者拥有底层表的访问权限,该角色就能通过视图正常查询数据,不会泄露基础表的额外内容。
内容的提问来源于stack exchange,提问作者Djabone
相关产品推荐
相关产品推荐

