PostgreSQL中如何全局授予视图SELECT权限?是否需逐个授权?
解决PostgreSQL中批量给视图授予SELECT权限的问题
不用逐个给视图授权的!你遇到的问题大概率是两个小细节没处理对:
- 你写的授权语句里把目标用户写成了
system,但你实际要开放权限的是reader用户 - 只给现有视图授权还不够,得考虑后续新建视图的默认权限,不然之后创建的视图
reader还是没访问权限
下面是具体的操作步骤:
1. 给现有所有视图批量授权
先修正你的授权语句,把目标用户改成reader:
GRANT SELECT ON ALL VIEWS IN SCHEMA public TO reader;
如果你的视图依赖了序列(比如包含自增ID字段的视图),可能还需要给序列授权,否则查询视图时可能抛出权限错误:
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO reader;
2. 设置默认权限,覆盖未来新建的视图
上面的语句只对当前已存在的视图生效,如果你之后要创建新的视图,想让reader自动获得SELECT权限,可以设置默认权限规则:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON VIEWS TO reader;
同理,如果需要给未来新建的序列也自动开放权限:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO reader;
关键补充:确保reader无法直接访问基础表
既然你的核心需求是让reader只能通过视图读取数据,记得要撤销之前给reader的基础表访问权限(如果之前授权过的话):
REVOKE SELECT ON ALL TABLES IN SCHEMA public FROM reader;
这样就能彻底保证reader只能通过视图获取数据,无法直接操作底层表了。
内容的提问来源于stack exchange,提问作者pm100
相关产品推荐
相关产品推荐

