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

PostgreSQL 15升级后public schema权限授予无效及权限变化咨询

PostgreSQL权限问题解答

问题1:已授予schema权限为何仍提示权限不足?

可能有以下几个原因:

  • 搜索路径未包含public:切换到trololo用户后执行SHOW search_path;,如果public不在返回的路径列表里,直接CREATE TABLE会尝试在搜索路径的第一个schema中创建,若该schema无权限就会报错。此时要么显式指定schema创建表(CREATE TABLE public.你的表名(...);),要么修改搜索路径(SET search_path TO public;)。
  • 权限通过无继承属性的角色获得:如果权限是授予给某个角色,再将角色授予trololo时用了NOINHERIT参数,那么trololo默认不会继承该角色的权限。需要执行SET ROLE <对应角色名>;才能激活角色权限。
  • 权限实际未生效:检查是否存在后续的REVOKE操作,或者public schema的所有者被修改,导致之前的GRANT权限被覆盖。可以重新执行一次GRANT ALL ON schema public TO trololo;再测试。

问题2:PostgreSQL 12升级到15后,为何需要同时授予schema权限?

这是因为PostgreSQL 14对public schema的默认权限做了变更:

  • 在PostgreSQL 13及更早版本中,public schema默认会给PUBLIC角色(所有用户)授予CREATE和USAGE权限,所以普通用户默认就能在public里创建表,只需要后续给表权限即可操作。
  • 从PostgreSQL 14开始,默认只给PUBLIC角色保留USAGE权限,移除了CREATE权限。因此现在用户要在public schema中创建对象(比如表),必须显式授予CREATE(或ALL)权限,否则即使有表权限也无法创建对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:45:14