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


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
    

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"


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 ...


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.