Méthode d'authentification PostgreSQL 10 non prise en charge

Oct 22 2020

J'essaye de suivre le tutoriel diesel.rs en utilisant PostgreSQL . Lorsque j'arrive à l'étape de configuration Diesel, j'obtiens une erreur "méthode d'authentification 10 non prise en charge". Comment résoudre ce problème?

Réponses

1 LaurenzAlbe Oct 22 2020 at 13:04

Vous devez mettre à niveau le logiciel client PostgreSQL (dans ce cas, la libpq utilisée par le pilote Rust) vers une version ultérieure prenant en charge la scram-sha-256méthode d'authentification introduite dans PostgreSQL v10.

La rétrogradation password_encryptionde PostgreSQL vers md5, la modification de tous les mots de passe et l'utilisation de la md5méthode d'authentification est une alternative possible, mais mauvaise. C'est plus d'effort, et vous obtenez une sécurité moindre et un vieux logiciel bogué.

VladZ Dec 19 2020 at 23:58

Ce n'est pas une question spécifique à Rust; le problème s'applique à toute application se connectant à une base de données Postgres qui ne prend pas en charge la méthode d'authentification scram-sha-256. Dans mon cas, c'était un problème avec l'application Perl se connectant à Postgres.

Ces étapes sont basées sur un message .

Vous devez avoir installé le dernier client Postgres. Le répertoire bin client ( SRC) est "C: \ Program Files \ PostgreSQL \ 13 \ bin" dans cet exemple. Le TRGrépertoire target ( ) est l'endroit où mon binaire d'application est installé: "C: \ Strawberry \ c \ bin". Mon application a échoué lors d'une tentative de connexion de la base de données Postgres avec l'erreur "... méthode d'authentification 10 non prise en charge ...".

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

À ce stade, j'ai pu me connecter avec succès à Postgres à partir de mon script Perl.

Le message initial présenté ci-dessus suggérait également de copier d'autres DLL de la source vers la cible:

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

Cependant, j'ai pu résoudre mon problème sans copier ces bibliothèques.