即使使用GRANT命令后,创建表的权限也被拒绝

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

我已连接到具有

postgres
角色的 Postgres 14 实例。我创建了一个名为
airflow
的新数据库和一个名为
airflow
的新用户/角色,他是该数据库的所有者。

                                        List of databases
   Name    |    Owner    | Encoding |   Collate   |    Ctype    |        Access privileges
-----------+-------------+----------+-------------+-------------+---------------------------------
 airflow   | airflow     | UTF8     | en_HK.UTF-8 | en_HK.UTF-8 |

我已发出命令

grant all on database airflow to airflow;
然后我:

                                        List of databases
   Name    |    Owner    | Encoding |   Collate   |    Ctype    |        Access privileges
-----------+-------------+----------+-------------+-------------+---------------------------------
 airflow   | airflow     | UTF8     | en_HK.UTF-8 | en_HK.UTF-8 | =Tc/airflow                    +
           |             |          |             |             | airflow=CTc/airflow

但是我仍然收到此错误:

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.InsufficientPrivilege) permission denied for schema public
LINE 2: CREATE TABLE log (
                     ^

[SQL:
CREATE TABLE log (
        id SERIAL NOT NULL,
        dttm TIMESTAMP WITH TIME ZONE,
        dag_id VARCHAR(250),
        task_id VARCHAR(250),
        map_index INTEGER,
        event VARCHAR(30),
        execution_date TIMESTAMP WITH TIME ZONE,
        owner VARCHAR(500),
        extra TEXT,
        CONSTRAINT log_pkey PRIMARY KEY (id)
)    
]

(此错误的背景:https://sqlalche.me/e/14/f405

我正在以

airflow
用户身份连接到
airflow
数据库的实例。

更新:刚刚在 pgAdmin 上看到我没有授予气流的所有公共模式......

enter image description here

postgresql privileges sql-grant
2个回答
5
投票
grant all on database airflow to airflow;

听起来很强大,但作用不大。该角色仍然需要对数据库内的架构、表以及可能更多对象的额外权限。

特别是,您的错误消息显示:

模式公共的权限被拒绝

因此,您(至少)需要架构

CREATE
public
权限。直接或通过授予
PUBLIC
的方式。喜欢:

GRANT CREATE ON SCHEMA public TO airflow;

Postgres 15 的重要更新! 发行说明:

删除公共模式的

PUBLIC

创建权限(Noah Misch)

并且:

public

 架构的所有者更改为新的 
pg_database_owner
 角色 (Noah Misch)

您仍然可以按照自己喜欢的方式进行更改。这只是新的、更安全、更严格的默认设置。请点击链接了解详情。

但这不适用于 Postgres 14。您必须自己以某种方式删除了权限。

相关:

  • PostgreSQL:向用户授予 PostgreSQL 数据库的所有权限
  • 如何管理数据库与架构上用户的默认权限?

0
投票
您可以将数据库的所有者更改为新用户:

将数据库气流所有者更改为气流;

© www.soinside.com 2019 - 2024. All rights reserved.