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)
我得到:
如何在公共模式中创建表?
新潮
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) schema
- Richard 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 thepublic
(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的变化是基于此的。
谢谢你!。我明白,公共是不同的。我怎样才能执行这个命令。
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 myDB
和myDB=# GRANT USAGE, CREATE ON SCHEMA public TO admin;
- Merkalov Anton 2022-10-18
特别感谢,我在这个问题上卡了两天,
keycloak
无法访问public schema
。
- Askar 2022-10-26
#2楼
得票数 0
您已在授予对public
模式的权限后创建了数据库。您的admin
用户可能正在使用新数据库,该数据库仅具有默认权限