Postgres 15. 模式公共权限被拒绝

Mer*_*ton 51 sql postgresql debian postgresql-15

无法以非超级用户身份在公共架构中创建表

postgres - 超级用户。

我做了什么:

ALTER SCHEMA public owner to postgres;  

CREATE USER admin WITH PASSWORD 'my-password';   

GRANT USAGE, CREATE ON SCHEMA public TO postgres;   
GRANT USAGE, CREATE ON SCHEMA public TO admin;    

CREATE DATABASE mydb;    
GRANT ALL ON DATABASE mydb TO admin;
Run Code Online (Sandbox Code Playgroud)

特权:

postgres=# \dn+
                          List of schemas
  Name  |  Owner   |  Access privileges   |      Description       
--------+----------+----------------------+------------------------
 public | postgres | postgres=UC/postgres+| standard public schema
        |          | =UC/postgres        +| 
        |          | admin=UC/postgres    | 
(1 row)
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

在此输入图像描述

如何在公共模式中创建表?

Zeg*_*rek 117

第一条评论指出了发生这种情况的最可能原因。引用发布公告

PostgreSQL 15 还撤销了CREATE除(或默认)模式中的数据库所有者之外的所有用户的权限public

您的修复不起作用的原因是您对数据库执行的postgres有关用户admin模式权限的所有操作public仅涉及数据库中的该模式postgrespublic数据库上的架构与新创建的postgres架构不同。publicmydb

另外,这个:

GRANT ALL ON DATABASE mydb TO admin;
Run Code Online (Sandbox Code Playgroud)

授予数据库本身的权限,而不是数据库内的内容。admin例如,现在可以删除数据库,但仍然无法在 schema 中创建表public。我的猜测是您还想成为admin的所有者mydb,在这种情况下您需要添加

ALTER DATABASE mydb OWNER TO admin;
Run Code Online (Sandbox Code Playgroud)

或者你需要重复你的GRANT USAGE, CREATE ON SCHEMA public TO admin;on mydb

以下是有关 PostgreSQL 15 更改所基于的安全模式使用模式的更多文档。

  • 谢谢你!我知道公众是不同的。我如何执行命令:`GRANT USAGE, CREATE ON SCHEMA public TO admin;` 对于“mydb”上的公共模式?抱歉,如果我的问题很愚蠢)`ALTER DATABASE mydb OWNER TO admin;` 这项工作,但不是我想要的) (2认同)