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.