我一直在维护这个 GitHub 存储库,该存储库已闲置近一年了。重新运行去年 5 月完成的 GitHub Actions 作业时,现在存在与 PostgreSQL 公共(public)架构中的 CREATE
权限相关的问题。起初我怀疑,这可能是因为最近的 PostgreSQL 15 更新导致用户默认情况下没有对公共(public)模式的创建访问权限。然而,对于我们的工作,GitHub Actions 使用 Ubuntu 22.04 (postgresql_14+238) 的 Postgres 14,因此 PostgreSQL 中公共(public)架构访问的这一更改不应影响我们。我们之前的测试运行使用的是 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
之前显式授予
GRANT ALL ON SCHEMA public TO <name>;
这似乎是根据返回的 GRANT
进行的。
在本地,即使没有使用 PostgreSQL 14 的 GRANT
,我也没有遇到权限问题,但即使在向用户授予对公共(public)架构的访问权限后,GitHub Actions 上仍然会出现权限错误(并且在绝望的尝试中——对所有用户)。
我已经完成了一系列与确保我们在 CREATE 步骤中使用 GRANT
之后也能获得权限。我关注了postgresql - view schema privileges查看架构权限,并且在本地,GRANT
之前就具有公共(public)架构的权限。但是,在 GitHub Actions 上,GRANT
之前和之后都没有权限,即使有输出确认 GRANT
已成功完成。
有谁知道为什么我现在在 GitHub Actions 上会出现这些权限错误,尽管几个月前代码在本地和 GitHub Actions 上都可以运行?有什么方法可以以不同的方式授予权限,从而在这种环境中效果更好?
最佳答案
架构 public
的权限在 v15 中发生了变化。此更改最终摆脱了允许每个用户在该架构中创建对象的不安全默认设置。现在默认只允许数据库所有者创建对象。
您的GRANT
语句可以很好地允许用户在模式public
中创建对象:
GRANT CREATE ON SCHEMA public TO user_that_creates_objects;
请记住,在运行该语句之前您必须连接到目标数据库。此外,GRANT
必须由数据库所有者或 super 用户执行。
我的建议是保留扩展对象的public
架构,并为应用程序对象创建您自己的架构。
关于postgresql - 如何解决 GitHub Actions 上 PostgreSQL 的 "permission denied for schema public"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75463561/