Pytanie Jak mogę uzyskać poprawne uwierzytelnienie pg_dump?


Próbowałem użyć zmiennej języka macierzystego PGPASSWORD i .pgpass żadne z tych dwóch nie pozwoli mi uwierzytelnić się w bazie danych. mam chmod're .pgpass do odpowiednich uprawnień, a także wypróbowane:

export PGPASSWORD=mypass and PGPASSWORD=mypass

Hasło DOES zawiera \ jednak umieszczałem go w pojedynczych cytatach PGPASS='mypass\' i nadal nie będzie uwierzytelniania.

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"

76
2018-05-03 11:42


pochodzenie


To "... uwierzytelnienie Peer ..." część komunikatu o błędzie oznacza, że ​​nie używa uwierzytelnianie hasła w ogóle. - Milen A. Radev


Odpowiedzi:


Szybkie rozwiązanie

Problem polega na tym, że stara się wykonywać lokalnie peer uwierzytelnianie na podstawie bieżącej nazwy użytkownika. Jeśli chcesz użyć hasła, musisz podać nazwę hosta -h.

pg_dump dbname -U username -h localhost -F c

Wyjaśnienie

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

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

To mówi Postgres do użycia peer uwierzytelnianie dla użytkowników lokalnych, które wymaga nazwy użytkownika postgres w celu dopasowania do bieżącej nazwy użytkownika systemu. Drugi wiersz odnosi się do połączeń za pomocą nazwy hosta i pozwala na uwierzytelnienie za pomocą hasła za pośrednictwem md5 metoda.

Moja preferowana konfiguracja programistyczna

UWAGA: To powinno być używane tylko na stacjach roboczych dla pojedynczego użytkownika. Może to doprowadzić do poważnej luki w zabezpieczeniach na maszynie produkcyjnej lub wielodostępnej.

Podczas pracy z lokalną instancją Postgres chciałbym zmienić moją lokalną metodę uwierzytelniania na trust. Umożliwi to połączenie się z postgres za pośrednictwem lokalnego gniazda unix jako dowolny użytkownik bez hasła. Można to zrobić po prostu zmieniając peer powyżej do trust i przeładowywanie postgreSów.

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

154
2018-05-03 19:34



Pomogło. dzięki - StarWars
Dla każdego, kto nie jest pewien, gdzie znajduje się plik conf: użyj sudo locate pg_hba.conf - to musi być sudo, ponieważ użytkownik postgregu będzie jedynym z dostępem do katalogu (chyba). - jcollum