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身份验证方法是一种可能的选择,但不是很好的选择。这需要更多的努力,而且您会得到更差的安全性和旧的、有缺陷的软件。
这不是一个 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)
但是,我能够在不复制这些库的情况下解决我的问题。