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"
Kosmonaut
źródło
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
Jim Mitchener
źródło
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
-1

Czasami możesz użyć

sudo -u postgres pg_dump ...
Roland Pihlakas
źródło