PG11非所有者用户无需Schema创建权限仍能建表问题求助
问题分析与解决方案
核心原因
你遇到的问题根源在于public schema的公共权限设置:从你提供的权限输出中可以看到=UC/postgres这一行,这代表所有角色(= 表示PUBLIC角色,即所有用户)都被授予了该schema的U(Usage,使用权限)和C(Create,创建权限)。即使你单独收回了odi角色的Create权限,公共权限依然会生效,所以odi仍能创建表。
验证步骤
执行以下命令确认当前public schema的权限详情:
\dn+ public
重点查看是否存在=UC/xxx的公共权限条目。
解决方案
- 收回所有角色的public schema创建权限
先取消公共权限中的Create权限,这会影响所有未被单独授权的角色:REVOKE CREATE ON SCHEMA public FROM PUBLIC; - 清理odi角色的残留权限
确保odi没有其他途径获得该schema的创建权限:REVOKE ALL ON SCHEMA public FROM odi; - 按需给特定角色授权(可选)
如果需要给某些角色保留public schema的创建权限,比如数据库所有者postgres,可以单独授予:GRANT CREATE ON SCHEMA public TO postgres;
补充说明
PostgreSQL默认会给public schema授予PUBLIC角色(所有用户)Usage和Create权限,这是一个容易被忽略的默认配置。当遇到非所有者角色能操作schema的情况,优先检查公共权限设置。
内容的提问来源于stack exchange,提问作者Linna
相关产品推荐
相关产品推荐

