Jak uzyskać poprawne uwierzytelnienie pg_dump


98

Próbowałem za pomocą zmiennej hosta PGPASSWORDi .pgpassi żadna z tych dwóch pozwoli mi uwierzytelniania w bazie danych. Mam chmod„d .pgpassdo odpowiednimi uprawnieniami, a także próbowałem:

export PGPASSWORD=mypass and PGPASSWORD=mypass

Hasło OBEJMUJE znak, \który został przeze mnie ujęty w pojedyncze cudzysłowy PGPASS='mypass\'i nadal nie zostanie uwierzytelniony.

Biegnę:

pg_dump dbname -U username -Fc

i nadal otrzymuję

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL:  Peer authentication failed for user "username"

1
Ta część komunikatu o błędzie „… Uwierzytelnianie równorzędne…” oznacza, że ​​w ogóle nie używa uwierzytelniania hasłem .
Milen A. Radev

Odpowiedzi:


197

Szybkie rozwiązanie

Problem polega na tym, że próbuje przeprowadzić lokalne peeruwierzytelnianie na podstawie Twojej bieżącej nazwy użytkownika. Jeśli chcesz użyć hasła, musisz podać nazwę hosta za pomocą -h.

pg_dump dbname -U username -h localhost -F c

Wyjaśnienie

Wynika to z następujących przyczyn w Twoim pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

To informuje Postgres, aby używał peeruwierzytelniania dla lokalnych użytkowników, co wymaga, aby nazwa użytkownika postgres była zgodna z bieżącą nazwą użytkownika systemu. Druga linia odnosi się do połączeń przy użyciu nazwy hosta i umożliwia uwierzytelnianie za pomocą hasła za pomocą tej md5metody.

Moja preferowana konfiguracja programistyczna

UWAGA : Powinno to być używane tylko na stacjach roboczych jednego użytkownika. Może to prowadzić do poważnej luki w zabezpieczeniach na komputerze produkcyjnym lub komputerze przeznaczonym dla wielu użytkowników.

Podczas opracowywania na lokalną instancję postgres lubię zmieniać lokalną metodę uwierzytelniania na trust. Pozwoli to na łączenie się z postgres przez lokalne gniazdo unix jako dowolny użytkownik bez hasła. Można to zrobić, po prostu przechodząc peerpowyżej trusti ponownie ładując postgres.

# Don't require a password for local connections
local   all             all                                     trust

6
Dla każdego, kto nie jest pewien, gdzie jest twój plik conf: użyj sudo locate pg_hba.conf- musi to być sudo, ponieważ użytkownik postgres będzie jedynym, który będzie miał dostęp do katalogu (myślę).
jcollum

Twoje polecenie zadziałało dla mnie, ale nie mogę dowiedzieć się, gdzie to jest ani jaka jest nazwa pliku, jak mogę znaleźć ten plik?
Sobhan

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.