2011-07-21 24 views
5

Po dwóch godzinach czytania dokumentacji, kodu źródłowego i wątków pomocy, poddaję się. Nie mogę przekonać psycopg2 do uwierzytelnienia za pomocą ciągu md5. Zgodnie z wątkiem this nie muszę niczego poza włączeniem md5-auth w pg_hba.conf.Czy mogę używać uwierzytelniania md5 w psycopg2?

To jest mój obecny pg_hba.conf:

# TYPE DATABASE USER  CIDR-ADDRESS   METHOD 
local all   all        md5 
host all   all   127.0.0.1/32   md5 
host all   all   ::1/128    md5 
host all   all   0.0.0.0/0    md5 

i używam psycopg2 takiego:

psycopg2.connect(host='localhost', port=5433, user='me', password='md5xxxx').cursor() 

Co daje:

psycopg2.OperationalError: FATAL: password authentication failed for user "me" 

Naturalnie, podane hasło pasuje z pg_authid. rolpassword.

Zgodnie z pg_hba.conf mogę zalogować się tylko za pomocą md5-auth (w prawo?). Mimo to moje odhasowane hasło działa poprawnie (i nie jest mieszane) i nie mogę znaleźć żadnych odniesień do psycopg2, które mieszają go w kodzie źródłowym.

Pomoc?

Dzięki!

Odpowiedz

5

Psycopg2 is a wrapper around libpq, czyli biblioteka klienta PostgreSQL, która już to implementuje. Nie musisz mieszać hasła. Zostanie zahartowany (przez libpq) zanim zostanie wysłany przez przewód.


Warto zauważyć, że libpq faktycznie wysyła sumę MD5 hasła osolonej z nazwą użytkownika, jak również sumy MD5 tej sumy MD5 osolonej z udostępnionego połączenia stałej (patrz the source here). Replikowanie tego zachowania wymagałoby trochę pracy.

+0

OK, dziękuję! Więc domyślam się, że nie można uwierzytelnić się za pomocą ciągu md5? – Martijn

+0

Po przejściu przez skrót MD5 twojego hasła, libpq wyliczy wartość skrótu MD5 tego hashu i wyśle ​​go wzdłuż przewodu. Zobacz także moją edycję powyżej. – ig0774