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

PG11非所有者用户无需Schema创建权限仍能建表问题求助

问题分析与解决方案

核心原因

你遇到的问题根源在于public schema的公共权限设置:从你提供的权限输出中可以看到=UC/postgres这一行,这代表所有角色(= 表示PUBLIC角色,即所有用户)都被授予了该schema的U(Usage,使用权限)和C(Create,创建权限)。即使你单独收回了odi角色的Create权限,公共权限依然会生效,所以odi仍能创建表。

验证步骤

执行以下命令确认当前public schema的权限详情:

\dn+ public

重点查看是否存在=UC/xxx的公共权限条目。

解决方案

  1. 收回所有角色的public schema创建权限
    先取消公共权限中的Create权限,这会影响所有未被单独授权的角色:
    REVOKE CREATE ON SCHEMA public FROM PUBLIC;
    
  2. 清理odi角色的残留权限
    确保odi没有其他途径获得该schema的创建权限:
    REVOKE ALL ON SCHEMA public FROM odi;
    
  3. 按需给特定角色授权(可选)
    如果需要给某些角色保留public schema的创建权限,比如数据库所有者postgres,可以单独授予:
    GRANT CREATE ON SCHEMA public TO postgres;
    

补充说明

PostgreSQL默认会给public schema授予PUBLIC角色(所有用户)Usage和Create权限,这是一个容易被忽略的默认配置。当遇到非所有者角色能操作schema的情况,优先检查公共权限设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:36:00