Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
PostgreSQL
peer authentication failed - logowanie lokalne przez psql
Błąd o nieudanym uwierzytelnieniu metodą peer myli wielu początkujących, bo pojawia się nawet wtedy, gdy hasło jest poprawne. Sęk w tym, że przy tej metodzie hasło w ogóle nie jest brane pod uwagę. Wyjaśnimy Ci, na czym polega uwierzytelnianie peer, dlaczego blokuje logowanie na przykład na konto postgres i jak połączyć się z bazą lokalnie na kilka różnych sposobów. Temat dotyczy każdego, kto pracuje z PostgreSQL na Linuksie i loguje się z tej samej maszyny.
Wpisujesz polecenie logowania przez psql, podajesz użytkownika bazy, a terminal odpowiada komunikatem o nieudanym uwierzytelnieniu metodą peer dla tej roli. Hasła nawet nie zdążyłeś podać albo podałeś je, a i tak nic to nie dało. Najczęściej trafia się to przy próbie zalogowania na konto postgres z poziomu własnego, zwykłego konta w systemie. Co ciekawe, ten sam użytkownik potrafi zalogować się bez problemu przez połączenie sieciowe, czyli podając adres hosta, a lokalnie odbija się od tego błędu. To pierwsza wskazówka, że problem leży w metodzie uwierzytelniania dla połączeń lokalnych.
PostgreSQL na Linuksie dla połączeń przez gniazdo lokalne domyślnie używa metody peer. Działa ona zupełnie inaczej niż logowanie hasłem. Serwer pyta system operacyjny, jak nazywa się użytkownik, który nawiązuje połączenie przez gniazdo, i sprawdza, czy ta nazwa zgadza się z nazwą roli w bazie, na którą chcesz się zalogować. Jeśli jesteś zalogowany w systemie jako, powiedzmy, andrzej, a próbujesz wejść do bazy jako postgres, nazwy się nie zgadzają i uwierzytelnienie pada, niezależnie od tego, jakie hasło znasz. Hasło przy metodzie peer nie jest w ogóle sprawdzane. Dlatego to samo konto działa przez sieć, bo połączenia sieciowe zwykle mają w pg_hba.conf przypisaną metodę hasłową, na przykład scram-sha-256, a nie peer. Cała różnica bierze się z tego, który wiersz pliku pg_hba.conf pasuje do danego typu połączenia.
Logowanie działa, gdy po wydaniu polecenia psql trafiasz do znaku zachęty bazy zamiast do komunikatu o błędzie. Wykonaj SELECT current_user;, żeby potwierdzić, jaką rolą faktycznie jesteś zalogowany, bo to pokazuje, czy dopasowanie nazw zadziałało zgodnie z oczekiwaniem. Jeśli zmieniałeś metodę uwierzytelniania, sprawdź, że przy logowaniu hasłem serwer faktycznie pyta o hasło i akceptuje poprawne. Możesz też zajrzeć do dziennika serwera, gdzie przy nieudanych próbach widać, która metoda i dla której roli zawiodła, co potwierdza, że pracujesz na właściwym wierszu konfiguracji.
Wróć do listy: 100 najczęstszych pytań i problemów z PostgreSQL

Sprawdź szkolenie: Administracja, replikacja i tuning baz danych PostgreSQL
To szkolenie może być dofinansowane z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Sprawdź szkolenie: Zaawansowana administracja PostgreSQL (HA, DR, monitoring, skalowanie)
To szkolenie może być dofinansowane z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...