如何解决 GitHub Actions 上 PostgreSQL 的“权限被公开模式拒绝”错误?

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

我一直致力于维护这个 GitHub 存储库,该存储库已闲置近一年了。重新运行去年 5 月完成的 GitHub Actions 作业时,现在存在与 PostgreSQL 公共架构中

CREATE
权限相关的问题。起初我怀疑,这可能是因为最近的 PostgreSQL 15 更新导致用户默认情况下没有对公共模式的创建访问权限。然而,对于我们的工作,GitHub Actions 使用 Ubuntu 22.04 (postgresql_14+238) 的 Postgres 14,因此 PostgreSQL 中公共架构访问的这一更改不应影响我们。我们之前的运行使用的是 Ubuntu 20.04 的 Postgres 12 (postgresql-12_12.10-0ubuntu0.20.04.1),因此更改后的环境可能仍然相关。

在我们使用 :

在数据库中创建一些表的步骤中,作业出错了
peewee.ProgrammingError: permission denied for schema public
LINE 1: CREATE TABLE IF NOT EXISTS "articles" ("id" INTEGER NOT NULL...

在此步骤之前,我们配置 PostgreSQL 数据库,创建 并授予其数据库的所有权限:`

CREATE USER <user>;
GRANT ALL PRIVILEGES ON DATABASE <db_name> to <user>

为了解决这个问题(虽然仍然对它出现的原因感到困惑),我尝试在尝试任何 CREATE

 之前按照本文的建议显式授予 
公共模式的权限:https://www.cybertec- postgresql.com/en/error-permission-denied-schema-public/

GRANT ALL ON SCHEMA public TO <name>;

这似乎是根据返回的

GRANT
进行的。

在本地,即使没有使用 PostgreSQL 14 的

GRANT
,我也没有遇到权限问题,但 GitHub Actions 上仍然会出现权限错误,即使在向用户授予对公共模式的访问权限之后(并且在绝望的尝试中 - -所有用户)。

我已经完成了一系列与确保我们实际上在 CREATE

 步骤中使用 
相关的健全性检查,但即使在 GRANT
 之后,
似乎也永远不会最终获得权限。我按照 postgresql - 查看模式权限来查看模式权限,在本地,甚至在
GRANT
之前就具有公共模式的权限。但是,在 GitHub Actions 上,即使有输出确认 GRANT
 已成功完成,
GRANT
之前或之后都没有权限。

有谁知道为什么我现在在 GitHub Actions 上会出现这些权限错误,尽管几个月前代码在本地和 GitHub Actions 上都可以运行?有什么方法可以以不同的方式授予权限,从而在这种环境中效果更好?

postgresql permissions github-actions postgresql-14
2个回答
11
投票

模式

public
的权限在 v15 中发生了更改。此更改最终摆脱了允许每个用户在该架构中创建对象的不安全默认设置。现在默认只允许数据库所有者创建对象。

您的

GRANT
语句很好地允许用户在模式中创建对象
public

GRANT CREATE ON SCHEMA public TO user_that_creates_objects;

请记住,在运行该语句之前必须连接到目标数据库。此外,

GRANT
必须由数据库所有者或超级用户执行。

我的建议是保留扩展对象的

public
架构,并为应用程序对象创建您自己的架构。


0
投票

运行下面的 2 条语句将解决“错误:公共模式的权限被拒绝”的问题。

将所有 ON SCHEMA 公共授予 将所有数据库物流授予

您可以将 ALL 替换为您所需的访问权限(例如,CREATE、SELECT?)

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