不支持PostgreSQL身份验证方法10

时间:2020-10-22 02:34:00

标签: postgresql rust

因此,我正尝试使用PostgreSQL(https://diesel.rs/guides/getting-started/)来遵循柴油.rs教程。当我进入柴油设置步骤时,出现“不支持身份验证方法10”错误。我在Google上查询过此内容,但尚未找到任何解决方案。希望有人知道如何解决。谢谢。

2 个答案:

答案 0 :(得分:1)

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

将PostgreSQL中的password_encryption降级为md5,更改所有密码并使用md5身份验证方法是可能的,但是很糟糕。这需要更多的努力,并且您的安全性和旧的,有故障的软件也会变得更糟。

答案 1 :(得分:0)

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

这些步骤基于 on a post

您需要安装最新的 Postgres 客户端。 在本例中,客户端 bin 目录 (SRC) 是“C:\Program Files\PostgreSQL\13\bin”。目标 (TRG) 目录是我的应用程序二进制文件的安装位置:“C:\Strawberry\c\bin”。我的应用程序在尝试连接 Postgres 数据库时失败,错误为“... 不支持身份验证方法 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

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

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

libiconv-2.dll
libcrypto-1_1-x64.dll
libssl-1_1-x64.dll
libintl-8.dll

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