You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何授予非超级用户Postgres集群所有数据库(含未来新建库)访问权限

Postgres非超级用户全集群权限配置方案

可以实现该需求,核心需要同时配置现有对象权限与模板库默认权限,即可覆盖集群内所有现有数据库,以及后续新建的数据库,具体操作如下:

  • 步骤1:创建目标非超级用户(已创建可跳过)
CREATE USER app_user WITH PASSWORD '你的强密码' NOSUPERUSER;
  • 步骤2:授予所有现有数据库的连接权限
    执行以下SQL生成批量授权语句,运行生成的所有语句即可完成现有库的连接授权:
SELECT 'GRANT CONNECT ON DATABASE ' || quote_ident(datname) || ' TO app_user;' 
FROM pg_database 
WHERE datistemplate = false;
  • 步骤3:配置模板库权限,覆盖后续新建的数据库
    Postgres新建数据库默认继承template1模板库的所有配置,修改该模板库的权限即可让后续新库自动继承权限:
-- 切换到template1模板库
\c template1
-- 授予schema使用权限
GRANT USAGE ON SCHEMA public TO app_user;
-- 授予模板库内现有所有表的权限,按需调整权限项(以下为增删改查全权限,只读场景可仅保留SELECT)
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;
-- 配置模板库内后续新建表的默认权限
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_user;
  • 步骤4:批量配置所有现有数据库的内部表权限
    执行以下SQL生成批量授权语句,逐库运行生成的语句即可完成所有现有库的表权限配置:
SELECT 'GRANT USAGE ON SCHEMA public TO app_user; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_user;'
FROM pg_database
WHERE datistemplate = false;

若集群内数据库存在public以外的自定义schema,需要将上述语句中的public替换为对应schema名称,或遍历所有schema执行授权即可。
权限项可按需调整,仅需只读权限时删除INSERT、UPDATE、DELETE即可。

内容的提问来源于stack exchange,提问作者Saul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:09:03