[英]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.