我一直致力于维护这个 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 上都可以运行?有什么方法可以以不同的方式授予权限,从而在这种环境中效果更好?
模式
public
的权限在 v15 中发生了更改。此更改最终摆脱了允许每个用户在该架构中创建对象的不安全默认设置。现在默认只允许数据库所有者创建对象。
您的
GRANT
语句很好地允许用户在模式中创建对象public
:
GRANT CREATE ON SCHEMA public TO user_that_creates_objects;
请记住,在运行该语句之前必须连接到目标数据库。此外,
GRANT
必须由数据库所有者或超级用户执行。
我的建议是保留扩展对象的
public
架构,并为应用程序对象创建您自己的架构。
运行下面的 2 条语句将解决“错误:公共模式的权限被拒绝”的问题。
将所有 ON SCHEMA 公共授予 将所有数据库物流授予
您可以将 ALL 替换为您所需的访问权限(例如,CREATE、SELECT?)