【问题标题】:Postgres 15. permission denied for schema publicPostgres 15. 架构公共权限被拒绝
【发布时间】:2023-01-23 01:47:23
【问题描述】:

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

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
  • “postgres”所有者数据库。 “postgres”所有者模式“公共”。 \dn+ 显示管理员可以完全访问架构,但这对我不起作用。

标签: sql postgresql debian postgresql-15


【解决方案1】:

从 Postgres 15 开始,db 用户不再具有对“公共”模式的默认访问权限。所以你现在必须明确授予权限。这在以前的版本中是不需要的。

https://www.postgresql.org/about/news/postgresql-15-released-2526/

您对数据库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;

【讨论】:

  • 谢谢!我知道公众是不同的。我如何执行命令:GRANT USAGE, CREATE ON SCHEMA public TO admin; 对于“mydb”上的公共架构?对不起,如果我的问题很愚蠢)ALTER DATABASE mydb OWNER TO admin;这项工作,但不是我要找的)
  • 根据您所在的数据库客户端/IDE,您可能需要创建一个新连接。不管你现在连接到数据库postgres,你应该再次做同样的事情,只需将连接设置中的数据库名称替换为mydb。一旦你进入,你可以通过发出select current_database(), current_user;来确认
  • 非常感谢你。有用! postgres=# c myDBmyDB=# GRANT USAGE, CREATE ON SCHEMA public TO admin;
  • 特别感谢,我在这个问题上卡了两天,keycloak无法访问public schema
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2019-11-24
    • 2014-11-08
    相关资源
    最近更新 更多