Próbowałem za pomocą zmiennej hosta PGPASSWORD
i .pgpass
i żadna z tych dwóch pozwoli mi uwierzytelniania w bazie danych. Mam chmod
„d .pgpass
do 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"
postgresql
pg-dump
Kosmonaut
źródło
źródło
Odpowiedzi:
Szybkie rozwiązanie
Problem polega na tym, że próbuje przeprowadzić lokalne
peer
uwierzytelnianie na podstawie Twojej bieżącej nazwy użytkownika. Jeśli chcesz użyć hasła, musisz podać nazwę hosta za pomocą-h
.Wyjaśnienie
Wynika to z następujących przyczyn w Twoim
pg_hba.conf
To informuje Postgres, aby używał
peer
uwierzytelniania 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ą tejmd5
metody.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ącpeer
powyżejtrust
i ponownie ładując postgres.źródło
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ę).Czasami możesz użyć
źródło