Postgres 15.模式公共权限被拒绝

问题描述 投票:0回答:3

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

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)

我得到了什么:

enter image description here

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

sql postgresql debian postgresql-15
3个回答
126
投票

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

PostgreSQL 15 还撤销所有用户

CREATE 权限,除了
public
(或默认)架构中的数据库所有者。

您的修复不起作用的原因是您对数据库

postgres
执行的所有关于用户
admin
对架构
public
的权限的操作仅涉及数据库
postgres
中的该架构。数据库
public
上的架构
postgres
与新创建的
public
上的架构
mydb
不同。

还有这个:

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 更改所基于的更多文档。


1
投票

您已在授予public模式的权限后

创建了数据库。您的 
admin
 用户可能正在使用新的数据库,该数据库仅具有默认权限


0
投票
对我来说,解决方案是将目录更改为createdDB。

//脚本.sql

\c postgres; // adding this line was the fix CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE USER test PASSWORD 'test' NOSUPERUSER CREATEDB CREATEROLE INHERIT; GRANT CONNECT ON DATABASE postgres TO test; GRANT USAGE ON SCHEMA public TO test; GRANT CREATE ON SCHEMA public TO test; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO test; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO test; SELECT pg_catalog.has_schema_privilege('test', 'public', 'USAGE') AS has_usage,pg_catalog.has_schema_privilege('test', 'public', 'CREATE') AS has_create;`
    
© www.soinside.com 2019 - 2024. All rights reserved.