不支持 PostgreSQL 身份验证方法 10

cha*_*dge 19 postgresql rust rust-diesel

我正在尝试使用 PostgreSQL 遵循diesel.rs 教程。当我进入 Diesel 设置步骤时,收到“不支持身份验证方法 10”错误。我该如何解决?

Lau*_*lbe 19

您必须将 PostgreSQL 客户端软件(在本例中为 Rust 驱动程序使用的 libpq)升级到支持scram-sha-256PostgreSQL v10 中引入的身份验证方法的更高版本。

将 PostgreSQL降级password_encryption为 PostgreSQL md5,更改所有密码并使用md5身份验证方法是一种可能的选择,但不是很好的选择。这需要更多的努力,而且您会得到更差的安全性和旧的、有缺陷的软件。

  • 我使用的是 PostgreSQL 13。我更改了 pg_hba.conf 文件,将身份验证方法设置为信任,然后将 postgresql.conf 文件中的 password_encryption 设置为 md5。这两个文件都位于 /share/postgresql 文件夹中。自从编辑这些文件以来,我还没有更改过密码,所以我现在就尝试一下,看看会发生什么 (5认同)
  • 不。升级客户端软件。 (2认同)

Vla*_*adZ 6

这不是一个 Rust 特定的问题;该问题适用于连接到不支持 scram-sha-256 身份验证方法的 Postgres 数据库的任何应用程序。就我而言,这是 Perl 应用程序连接到 Postgres 的问题。

这些步骤基于帖子

您需要安装最新的 Postgres 客户端。在此示例中,客户端 bin 目录 ( SRC) 为“C:\Program Files\PostgreSQL\13\bin”。目标 ( TRG) 目录是我的应用程序二进制文件的安装位置:“C:\Strawberry\c\bin”。我的应用程序在尝试连接 Postgres DB 时失败,并出现错误“...不支持身份验证方法 10 ...”。

set SRC=C:\Program Files\PostgreSQL\13\bin
set TRG=C:\Strawberry\c\bin

dir "%SRC%\libpq.dll"         # to see the source DLL
dir "%TRG%\libpq__.dll"       # to see the target DLL. Will be replaced from SRC

cp "%SRC%\libpq.dll" %TRG%\.

cd %TRG%
pexports libpq.dll > libpq.def 
dlltool --dllname libpq.dll --def libpq.def --output-lib ..\lib\libpq.a

move "%TRG%"\libpq__.dll "%TRG%"\libpq__.dll_BUP # rename ORIGINAL name to BUP
move "%TRG%"\libpq.dll "%TRG%"\libpq__.dll       # rename new DLL to ORIGINAL
Run Code Online (Sandbox Code Playgroud)

此时,我可以从 Perl 脚本成功连接到 Postgres。

上面显示的初始帖子还建议将其他 DLL 从源复制到目标:

libiconv-2.dll
libcrypto-1_1-x64.dll
libssl-1_1-x64.dll
libintl-8.dll
Run Code Online (Sandbox Code Playgroud)

但是,我能够在不复制这些库的情况下解决我的问题。