postgresql - 如何解决 GitHub Actions 上 PostgreSQL 的 "permission denied for schema public"错误?

标签 postgresql permissions github-actions postgresql-14

我一直在维护这个 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 之前显式授予 对公共(public)模式的权限: https://www.cybertec-postgresql.com/en/error-permission-denied-schema-public/

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/

相关文章:

GitHub Classroom/GitHub Actions Autograding,如何通过邮件给予正面反馈?

python - Python 中的::set-output name=dir::sth

postgresql - Postgres - 解码特殊字符

c# - 正在保存上传的文件 - 进程无法访问

php - Windows 2019 和 PHP 7.3 : "session_start(): ps_files_cleanup_dir: opendir failed: No such file or directory (2)"

github-actions - 如何获取用户名,负责在 github 操作中触发工作流

sql左连接给出重复的多个值

c++ - 使用 PostgreSQL 连接器安装 SQLpp11

python - psycopg2 不返回结果

java - 3 : Permission denied. 在 com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846)