Komunikat o błędzie Postgres: FATAL: Uwierzytelnienie tożsamości nie powiodło się dla użytkownika „…”

26

Powiedz, że widzisz tę wiadomość:

FATAL:  Ident authentication failed for user "..."

Jakie są przyczyny tego komunikatu o błędzie?

Steve Bennett
źródło

Odpowiedzi:

36

Oznacza to, że Postgres próbuje uwierzytelnić użytkownika przy użyciu protokołu Ident i nie może. Identyfikator działa w następujący sposób:

  • Masz rolę bazy danych „foo” w bazie danych „db”
  • Twój pg_hba.confplik ( /etc/postgres-something/mainwewnątrz) definiuje „Ident” jako protokół połączenia z bazą danych dbdla użytkowników łączących się z określonych hostów
  • Uniksowa nazwa użytkownika nawiązująca połączenie to „foo”
  • Serwer Ident uruchomiony na komputerze, z którego użytkownik się łączy, potwierdza, że ​​jego nazwa użytkownika to naprawdę „foo”

Możliwe przyczyny i rozwiązania:

  1. Na komputerze, z którym próbujesz się połączyć, nie działa serwer tożsamości . Sprawdź to, próbując połączyć się z nim na porcie 113. Jeśli to się nie powiedzie, zainstaluj serwer Ident (np sudo apt-get install oidentd.).
  2. Istnieje serwer Ident, ale nie ma roli bazy danych odpowiadającej nazwie, z którą próbujesz się połączyć (w powyższym przykładzie „foo”). Utwórz go, łącząc się w jakiś sposób z bazą danych z uprawnieniami administratora i zrób to CREATE ROLE foo. Alternatywnie dodaj wpis do /etc/postgresql/.../main/pg_ident.conf.
  3. Może nazwa użytkownika powłoki nie pasuje do roli bazy danych. Możesz to przetestować , łącząc się z serwerem Ident podczas połączenia i przekazując odpowiednie numery portów.
  4. Może faktycznie chcesz połączyć się hasłem , a nie Ident. Dokonaj pg_hba.confodpowiedniej edycji pliku. Na przykład zmień:

    host all all 127.0.0.1/32 ident
    

    do

    host all all 127.0.0.1/32 md5
    
Steve Bennett
źródło
2
Plik fedora znajduje się w/var/lib/psql/data
Anwar,
Nie sądzę, aby ktokolwiek chciałby odpowiedzieć, dlaczego postgres używa „ident” jako domyślnego loginu?
icc97
Bo to miało sens 20 lat temu i nic się nie zmieniło w * nix? :)
Steve Bennett,
@ icc97, nic w tej odpowiedzi nie wskazuje, że „ident” jest domyślnym loginem dla Postgres; skąd masz ten pomysł? O ile wiem domyślna nazwa roli administratora w klastrze Postgres to „postgres”.
Wildcard
9

Nie jestem pewien co do przyczyn, ale to mnie naprawiło:

w pg_hba.conf

zmień na to:

hostuj wszystkie wszystkie 127.0.0.1/32 md5

Dokładny błąd: Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"

jacktrades
źródło
1
zmiana „ident” -> „md5” zrobiła to dla mnie
webwesen
3

W CentOS dodaj następujący wiersz do /var/lib/pgsql/9.3/data/pg_hba.conf:

host all all 127.0.0.1/32 trust

I skomentuj pozostałe wpisy.

Oczywiście to ustawienie nie jest bezpieczne, ale jeśli po prostu zadzierasz na programistycznej maszynie wirtualnej, takiej jak ja, prawdopodobnie jest w porządku ...

XåpplI'-I0llwlg'I -
źródło
0

Jeśli jeszcze tego nie próbowałeś, przejrzyj plik pg_hba.conf. Będzie się nazywać tak jak /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20); być może będziesz musiał użyć „find / -name pg_hba.conf”, aby go zlokalizować.

Na dole pliku zmień wartości „METODA” na „zaufanie” w testach lokalnych (pełne informacje znajdziesz w dokumentacji Postgres). Uruchom ponownie maszynę, aby upewnić się, że wszystko zostało uruchomione w czystości, a nowe parametry zostały odczytane.

Mam nadzieję, że to wyleczy twoje nieszczęścia. Rozwiązało to moje problemy na Fedorze 20 z PostgreSQL 9.3.

Alan Thompson
źródło
Ponowne uruchomienie całego komputera nie jest konieczne przy zmianie konfiguracji PostgreSQL. Zamiast tego spróbuj użyć pg_ctl reloadz konsoli lub SELECT pg_reload_conf();podczas wykonywania SQL jako użytkownik uprzywilejowany.
benjwadams