PostgreSQL-Authentifizierungsmethode 10 wird nicht unterstützt
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
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.
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.