PostgreSQL-Authentifizierungsmethode 10 wird nicht unterstützt

Oct 22 2020

Ich versuche, dem Tutorial von diesel.rs mit PostgreSQL zu folgen . Wenn ich zum Diesel-Setup-Schritt komme, wird der Fehler "Authentifizierungsmethode 10 nicht unterstützt" angezeigt. Wie löse ich es?

Antworten

1 LaurenzAlbe Oct 22 2020 at 13:04

Sie müssen die PostgreSQL-Client-Software (in diesem Fall die vom Rust-Treiber verwendete scram-sha-256libpq ) auf eine spätere Version aktualisieren , die die in PostgreSQL v10 eingeführte Authentifizierungsmethode unterstützt .

Ein Downgrade password_encryptionin PostgreSQL auf md5, das Ändern aller Kennwörter und die Verwendung der md5Authentifizierungsmethode ist eine mögliche, aber schlechte Alternative. Es ist mehr Aufwand und Sie erhalten schlechtere Sicherheit und alte, fehlerhafte Software.

VladZ Dec 19 2020 at 23:58

Dies ist keine rostspezifische Frage. Das Problem tritt bei allen Anwendungen auf, die eine Verbindung zu einer Postgres-Datenbank herstellen, die die Authentifizierungsmethode scram-sha-256 nicht unterstützt. In meinem Fall war es ein Problem mit der Perl-Anwendung, die eine Verbindung zu Postgres herstellt.

Diese Schritte basieren auf einem Beitrag .

Sie müssen den neuesten Postgres-Client installiert haben. Das Client-Bin-Verzeichnis ( SRC) lautet in diesem Beispiel "C: \ Programme \ PostgreSQL \ 13 \ bin". Im Zielverzeichnis ( TRG) ist meine Anwendungsbinärdatei installiert: "C: \ Strawberry \ c \ bin". Meine Anwendung ist beim Versuch, die Postgres-Datenbank mit dem Fehler "... Authentifizierungsmethode 10 nicht unterstützt ..." zu verbinden, fehlgeschlagen.

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

Zu diesem Zeitpunkt konnte ich über mein Perl-Skript erfolgreich eine Verbindung zu Postgres herstellen.

In dem oben gezeigten ersten Beitrag wurde auch vorgeschlagen, andere DLLs von der Quelle auf das Ziel zu kopieren:

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

Ich konnte mein Problem jedoch beheben, ohne diese Bibliotheken zu kopieren.