Postgres 15. permission denied for schema public
Categories:
PostgreSQL 15 大大加强了对 public 模式的使用的限制。调整如下:
- There is a new role
pg_database_owner
, which implicitly has the actual owner of the current database as a member. 有一个新的角色pg_database_owner
,它隐式地将当前数据库的实际所有者作为成员。 - The public schema is owned by that role now. public schema 现在由该角色拥有。
- The public schema does not have
CREATE
privileges granted by default anymore. 默认情况下,public schema 不再具有授予的CREATE
权限。
解决方案是在创建数据库时指定数据库 owner,或者使用 ALTER DATABASE
调整数据库 owner,这样就可以在 public schema 下创建表之类的了。
调整的原因是 public schema 是可以不添加前缀访问表的,恶意用户可以在 public schema 下创建 pg_catalog 下的表来扰乱正常用户。
一个比较好的实践:如果可以,新建一个 schema,在该 schema 创建表,当然这样做的话,就需要添加 schema 前缀了。