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

PostgreSQL中GRANT ALL对新表无效的原因及脚本修复方案

问题原因
  • 你当前脚本里的GRANT ALL ON ALL TABLES IN SCHEMA public TO dev_api;只对执行这条命令时已经存在的表生效,PostgreSQL不会自动把权限套用到之后新建的表上。
  • 另外,就算给了schema的权限,新表的所有权默认属于创建它的用户(比如超级用户postgres),dev_api不会自动拿到新表的访问权限。
解决方法

在脚本里加上默认权限授予的语句,让后续在public schema下创建的所有表、序列自动给dev_api开权限:

修改后的完整脚本:

create user dev_api with encrypted password 'xxx';
grant all privileges on database dev to dev_api;
ALTER USER dev_api CREATEDB;
GRANT ALL ON schema public TO dev_api;
GRANT ALL ON ALL TABLES IN SCHEMA public TO dev_api;
-- 新增:给后续创建的表自动赋予权限
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO dev_api;
-- 可选:如果表有自增字段,给序列也加默认权限
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO dev_api;
额外说明
  • ALTER DEFAULT PRIVILEGES只对之后新建的对象生效,不影响已经存在的表,所以原来的GRANT ALL ON ALL TABLES语句还要保留,用来处理现有表的权限。
  • 如果是dev_api自己创建新表,那新表的所有权就是dev_api,本身就有全权限;但如果是其他用户(比如超级用户)创建的新表,就必须靠默认权限让dev_api能访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:27:49