postgresql Postgres 15.拒绝对架构public的权限

woobm2wo  于 2023-01-25  发布在  PostgreSQL
关注(0)|答案(2)|浏览(390)

无法以非超级用户身份在公共方案中创建表
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;

特权:

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)

我得到的:x1c 0d1x
如何在公共模式中创建表?...
纽费格

x3naxklr

x3naxklr1#

第一条评论指出了发生这种情况的最可能原因。引用发布公告:
PostgreSQL 15还**从public(或默认)模式中撤销除数据库所有者之外的所有用户的CREATE权限。
您的修复不起作用的原因是,您在数据库postgres上针对用户admin对方案public的权限执行的所有操作仅涉及数据库postgres中的该方案。数据库postgres上的方案public与新创建的mydb上的方案public不同。
此外,这:

GRANT ALL ON DATABASE mydb TO admin;

admin现在可以删除数据库,例如,仍然不能在模式public中创建表。我猜您希望使admin也成为mydb的所有者,在这种情况下,您需要添加

ALTER DATABASE mydb OWNER TO admin;

或者您需要在mydb上重复您的GRANT USAGE, CREATE ON SCHEMA public TO admin;
这里有一些关于PostgreSQL 15更改所基于的 * 安全模式使用模式 * 的更多文档。

shyt4zoc

shyt4zoc2#

您已在授予public方案的权限之后创建了数据库。您的admin用户可能正在使用新数据库,该数据库仅具有默认权限

相关问题