如何解决 Postgresql SCRAM 身份验证问题?

Ali*_*min 10 database authentication postgresql libpq

将项目移至生产环境后出现错误。用生产服务器运行时报错如下

pg_connect():无法连接到 PostgreSQL 服务器:SCRAM 身份验证需要 libpq 10 或更高版本。

这是我的 postgreSQL 版本:

开发版本:

x86_64-pc-linux-gnu 上的 PostgreSQL 11.5,由 gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36) 编译,64 位

生产版本:

x86_64-pc-linux-gnu 上的 PostgreSQL 11.5 (EnterpriseDB Advanced Server 11.5.12),由 gcc (GCC) 4.8.5 编译 20150623 (Red Hat 4.8.5-36),64 位

sko*_*zen 94

对于那些使用基于 M1 的 Mac 且当前在 docker 中看到此问题的用户 - libpg 上游似乎存在一个错误,该错误是针对 ARM 上的错误库版本构建的。

在修复之前,解决方法是(在性能受到影响的情况下)通过 Rosetta 运行它

export DOCKER_DEFAULT_PLATFORM=linux/amd64,并重新构建您的图像。

您将获得最新版本的 libpq,一切都应该可以正常工作。

参考: https: //github.com/psycopg/psycopg2/issues/1360

  • 感谢您的提示。你的诊断是正确的。因为我使用 docker-compose 我选择使用这个答案 /sf/answers/4874553141/ (3认同)
  • 很好的解决方法,但我可以确认这现在适用于本机容器,使用 pyscopg2==2.9.3 正如 @ihm 在另一个答案中所建议的。 (3认同)
  • 这不仅会影响“性能”,而且如果您尝试运行比数据库更严重的东西,这也是不可接受的。 (2认同)

ihm*_*ihm 53

python:3.9我在运行我安装的 docker 映像时遇到了这个问题psycopg2-binary==2.9.3。安装psycopg2==2.9.3反而为我解决了这个问题。

  • 这为我解决了 M1/硅胶问题 (3认同)
  • 您是否在 docker 容器上安装了 psycopg2-binary 2.9.3 ?我可以在本地安装它,但每次构建 docker 映像时都会失败 (2认同)

zab*_*usa 31

对于亚马逊 Linux 用户:

$ sudo yum install -y amazon-linux-extras
Run Code Online (Sandbox Code Playgroud)

然后重新安装postgres客户端

$ sudo amazon-linux-extras install postgresql10
Run Code Online (Sandbox Code Playgroud)

然后主要部分安装 python 包,在我的例子中它是(psycopg2)重新安装它

$ pip3 install --force-reinstall psycopg2==2.9.3
Run Code Online (Sandbox Code Playgroud)

规格:python3.8.9


Lau*_*lbe 9

您的应用程序使用与 PostgreSQL 客户端 C 库链接的 API libpq

该库的版本必须是 9.6 或更低版本,并且在 v10 中引入了 SCRAM 身份验证。

libpq 在应用程序端升级并重试。

如果您不需要scram-sha-256身份验证,则可以恢复为md5

  • 设置password_encryption = md5postgresql.conf
  • 改变的验证方法md5pg_hba_conf
  • 重新加载 PostgreSQL
  • 修改用户密码,获取MD5加密密码

  • 您是否有与将我的库升级到版本 10 的答案相关的链接教程? (4认同)
  • 您是如何在客户端计算机上安装“libpq”的?可能您必须在新版本中重复这些步骤。 (2认同)
  • 如果它来自操作系统发行版,也许您可​​以升级操作系统?不过,从 PostgreSQL 网页安装软件包可能会更容易。但是,您可能还需要与“libpq”链接的模块的新版本。 (2认同)
  • 或者您可以恢复为“md5”。请参阅我的扩展答案。 (2认同)
  • @AlifRamdani您可以使用EnterpriseDB中的安装程序,也可以从ZIP文件中获取“libpq.dll”及其依赖库。 (2认同)

小智 7

如果您想保留 scram-sha-256 以确保安全。您需要更新客户端 postgreSQL 库,因为php-pgsql默认版本不支持它。

CentOS/Rhel/Rocky

yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install postgresql13
Run Code Online (Sandbox Code Playgroud)

这将更新服务器/客户端 libpq 以继续使用 scram-sha-256


小智 7

此问题仍然影响运行python:3.10.*docker 容器的 m1 mac(基于 aarch64 Debian 11)。对我来说,解决方案是安装psycopg2(从源代码构建),而不是psycopg2-binary建议在生产中安装:

pip install psycopg2
Run Code Online (Sandbox Code Playgroud)

python 容器已经拥有所有构建依赖项(如 gcc)。更适合生产的容器很可能不会有这些https://www.psycopg.org/docs/install.html#build-precessions


小智 6

我曾经碰到一个错误SCRAM认证要求的libpq版本10或以上 运行时php artisan migratelaravel 8。然后,我固定它,如下所示:更改身份验证从scram-sha-256md5,然后reset your passwordrestart the postgresql-x64-13 service这里是一步一步:

  1. 第1步:查找文件postgresql.confC:\Program Files\PostgreSQL\13\data,然后集password_encryption = md5
  2. 第 2 步:在其中查找文件pg_hba.confC:\Program Files\PostgreSQL\13\data然后全部更改METHODmd5
  3. 步骤3:安装postgres sql时打开command line (cmd,cmder,git bash...)并运行psql -U postgres然后输入密码
  4. 第 4 步:然后通过ALTER USER postgres WITH PASSWORD 'new-password'在命令行中运行来更改密码
  5. 最终:postgresql-x64-13在您的Service.

  • 第 4 步,请记住有“;” 在行尾。弄了半天才弄明白。运行成功会在psql窗口返回“ALTER ROLE” (4认同)

小智 5

根据@meijsermans的回答,我更改了django的requirements.txt:

#psycopg2-binary>=2.9.3
psycopg2>=2.9.5
Run Code Online (Sandbox Code Playgroud)

并且它没有出现 SCRAM 错误!

还尝试了在 docker.compose 中使用和不使用platform: linux/arm64,但没有解决问题。
尝试platform: linux/amd64并出现一些不相关的错误(主要是“exec /bin/sh:exec格式错误”)在postgres容器中
使用图像和django图像postgres:14.5python:3.10.7