Postgres 15.模式public的许可被拒绝了

回答 2 浏览 8147 2022-10-18

不能以非超级用户的身份在公共模式中创建表

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)

我得到: 在此输入图片描述

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

新潮

Merkalov Anton 提问于2022-10-18
postgresql.org/about/news/postgresql-15-released-2526 PostgreSQL 15 also revokes the CREATE permission from all users except a database owner from the public (or default) schemaRichard Huxton 2022-10-18
"postgres"所有者数据库。 "postgres"所有者模式"公共"。\dn+显示管理员有对模式的完全访问权,但这对我来说并不适用。Merkalov Anton 2022-10-18
2 个回答
#1楼 已采纳
得票数 25

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

PostgreSQL 15 also revokes the CREATE permission from all users except a database owner from the public (or default) schema.

你的修复没有奏效的原因是,你在数据库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的变化是基于此的。

Zegarek 提问于2022-10-18
Zegarek 修改于2023-01-22
谢谢你!。我明白,公共是不同的。我怎样才能执行这个命令。GRANT USAGE, CREATE ON SCHEMA public TO admin; 对于"mydb"上的公共模式?如果我的问题很愚蠢,请原谅)ALTER DATABASE mydb OWNER TO admin; 这个可以,但不是我想要的)Merkalov Anton 2022-10-18
根据你所处的数据库客户端/IDE,你可能需要创建一个新的连接。不管你现在连接到数据库postgres,你都应该再做一次,只是把连接设置中的数据库名称替换为mydb。一旦你进入了,你可以通过发出select current_database(), current_user;来确保Zegarek 2022-10-18
非常感谢你。它起作用了!postgres=# \c myDBmyDB=# GRANT USAGE, CREATE ON SCHEMA public TO admin;Merkalov Anton 2022-10-18
特别感谢,我在这个问题上卡了两天,keycloak无法访问public schemaAskar 2022-10-26
#2楼
得票数 0

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

JGH 提问于2022-10-18