繁体   English   中英

Postgres 15. 架构公共权限被拒绝

[英]Postgres 15. permission denied for schema public

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

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)

我得到了什么:在此处输入图像描述

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

新潮

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

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;

或者您需要重复GRANT USAGE, CREATE ON SCHEMA public TO admin; mydb上。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM