Postgres 15. permission denied for schema public

PostgreSQL 15 大大加强了对 public 模式的使用的限制。调整如下:

  1. There is a new role pg_database_owner, which implicitly has the actual owner of the current database as a member. 有一个新的角色 pg_database_owner,它隐式地将当前数据库的实际所有者作为成员。
  2. The public schema is owned by that role now. public schema 现在由该角色拥有。
  3. 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 前缀了。

参考资料