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

How can I solve Postgresql SCRAM authentifcation problem?

将项目移至生产环境后出现错误。 while 运行 production server

报错如下

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 位

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

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

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

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

  • postgresql.conf
  • 中设置password_encryption = md5
  • pg_hba_conf
  • 中将身份验证方法更改为 md5
  • 重新加载 PostgreSQL
  • 修改用户密码获取MD5加密密码

遇到了同样的问题并应用了@Laurenz Albe 的修复程序,但由于加密策略更改,我的数据库用户会收到身份验证错误。

因此,不要将 scram-sha-256 替换为 md5,而是将其替换为 pg_hba.conf

中的 trust

我曾经得到一个错误 SCRAM 身份验证需要 libpq 版本 10 或更高版本 当 运行ning php artisan migratelaravel 8。然后我按如下方式修复它:将身份验证从 scram-sha-256 更改为 md5,然后是 reset your passwordrestart the postgresql-x64-13 service,这里是一步一步的:

  1. 步骤 1: 在 C:\Program Files\PostgreSQL\data 中找到文件 postgresql.conf 然后设置 password_encryption = md5
  2. 步骤 2:在 C:\Program Files\PostgreSQL\data 中找到文件 pg_hba.conf 然后将所有 METHOD 更改为 md5
  3. 第三步:打开command line (cmd,cmder,git bash...)和运行psql -U postgres然后输入安装postgres时的密码sql
  4. 第 4 步:然后在命令行 运行 ALTER USER postgres WITH PASSWORD 'new-password' 中更改密码
  5. 最终:在您的 Service.
  6. 中重新启动服务 postgresql-x64-13

如果您想保留 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 instal postgresql13

这将更新 server/client libpq 以便继续使用 scram-sha-256

RUN apt-get -y update \
    && apt-get install -y build-essential gettext libpq-dev\
    && apt-get install -y wkhtmltopdf\
    && apt-get install -y gdal-bin\
    && apt-get install -y libgdal-dev\
    && apt-get install -y --no-install-recommends software-properties-common\
    && apt-add-repository contrib\
    && apt-get update

试试这个。

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

在它被修复之前,解决方法是(在性能上)只是 run it via rosetta

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

您将获得最新版本的 libpq,一切正常。

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

我 运行 进入这个,而 运行 我安装 psycopg2-binary==2.9.3python:3.9 docker 图像。安装 psycopg2==2.9.3 而不是为我解决了它。