2012-05-03 9 views
72

Próbowałem używać zmiennej języka bazowego PGPASSWORD i .pgpass i żadne z tych dwóch nie pozwoli mi uwierzytelnić się w bazie danych. Mam chmod byłyby .pgpass się odpowiednimi uprawnieniami, a także próbowałem:W jaki sposób można uzyskać poprawną uwierzytelnianie pg_dump?

export PGPASSWORD=mypass and PGPASSWORD=mypass 

hasło NIE zawierają \ jednak byłem otaczającą go w apostrofach PGPASS='mypass\' i nadal nie będzie uwierzytelnić.

biegnę:

pg_dump dbname -U username -Fc 

i nadal otrzymywać

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

Że „... uwierzytelniania Peer ...” częścią komunikatu o błędzie oznacza, że ​​nie używa uwierzytelniania [hasło] (http://www.postgresql.org/docs/current/static/auth- methods.html # AUTH-PEER) w ogóle. –

Odpowiedz

149

Szybkie rozwiązanie

Problemem jest to, że staramy się wykonać lokalnego uwierzytelnianie peer opartemu na obecna nazwa użytkownika. Jeśli chcesz użyć hasła, musisz podać nazwę hosta pod numerem -h.

pg_dump dbname -U username -h localhost -F c 

Wyjaśnienie

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

local all    all          peer 
host all    all    127.0.0.1/32   md5 

Mówi Postgresa używać peer uwierzytelnianie użytkowników lokalnych, która wymaga postgres nazwa użytkownika pasujące do Twojego obecnego systemu Nazwa Użytkownika. Drugi wiersz odnosi się do połączeń za pomocą nazwy hosta i umożliwia uwierzytelnienie za pomocą hasła za pomocą metody md5.

My Preferred Development Config

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

Podczas pracy z lokalną instancją postgresu chcę zmienić moją metodę lokalnego 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ć, zmieniając po prostu peer powyżej na trust i ponownie ładując postgres.

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

To pomogło. dzięki – StarWars

+3

Dla każdego, kto nie jest pewien, gdzie znajduje się twój plik conf: użyj 'sudo locate pg_hba.conf' - musi to być sudo, ponieważ użytkownik postgregu będzie jedynym z dostępem do katalogu (chyba). – jcollum

Powiązane problemy