Użytkownik PostgreSQL nie może połączyć się z serwerem po zmianie hasła

10

Spotkałem się z 4 rolami, które utworzyłem:
po zmianie hasła dla użytkownika w pgAdmin III za pomocą GUI (1), ten użytkownik nie może się już zalogować.
pgAdmin III pokazuje komunikat o błędzie:

An error has occurred:

Error connecting to the server: FATAL:  password authentication failed for user "sam"
FATAL:  password authentication failed for user "sam"

Mój system: Postgresql 9.2 na Ubuntu 12.04

Czy jest jakiś sposób to naprawić?

(1): zaloguj się za pomocą konta postgres, kliknij prawym przyciskiem myszy użytkownika w Role logowania, przejdź do zakładki „Definicja” i wprowadź hasło

Cao Minh Tu
źródło

Odpowiedzi:

15

Możliwe, że ugryzie Cię ten błąd PgAdmin ( dziennik zmian ):

2012-11-28 AV 1.16.1 Kontrola selektora daty domyślnie zwraca pełny znacznik czasu, co może powodować niezamierzone zmiany dat w zadaniach i datach ważności ról. Zignoruj ​​część czasu.

Ten błąd już dawno ustawiał daty wygaśnięcia hasła, takie jak 1/1/1970. W takim przypadku komunikat o błędzie podczas próby połączenia nie różni się niczym od podania nieprawidłowego hasła.

Możesz sprawdzić te daty ważności za pomocą:

SELECT usename,valuntil FROM pg_user;

a jeśli są w błędzie, zresetuj je za pomocą:

ALTER USER username VALID UNTIL 'infinity';

i zaktualizuj pgAdmin.

Daniel Vérité
źródło
Dziękuję Ci bardzo! To rozwiązało problem. Za każdym razem, gdy resetuję hasło użytkownika, pgAdmin ustawia prawidłowy czas do 01-01-1970, aby użytkownik nie mógł się już zalogować.
Cao Minh Tu
masz to! cholerne robaki
Carter Cole
Jak dokładnie mam się zalogować do psql ??? Właśnie tę rolę właśnie zaktualizowałem.
ericpeters0n 20.04.16
1
@ ericpeters0n: tymczasowo przełącz metodę uwierzytelniania na trustlub peerw pg_hba.confpliku dla tego konta.
Daniel Vérité
Dzięki, załatwiłem sprawę. Dla tych, którzy przyjdą później, „zaufanie” oznacza, że: Po ponownym uruchomieniu postgres możesz uruchomić psql bez uwierzytelniania hasłem, jeśli jesteś użytkownikiem o tej samej nazwie co użytkownik uprzywilejowany (np. Nazwa użytkownika „postgres”). Tak więc 'su - postgres psql' pozwoli ci zalogować się i poprawić hasło lub prawidłową datę.
ericpeters0n 21.04.16
3

Prostą rzeczą jest zalogowanie się za pomocą psql lub pgAdmin i

ALTER USER sam WITH PASSWORD 'new_password';

Teraz, jeśli nie możesz zalogować się przy użyciu konta administratora, możesz odzyskać, zmieniając ustawienia pg_hba.conf dla tego użytkownika i ponownie ładując konfigurację (czasami uważam, że wymaga to zrestartowania serwera, ale nie jestem pewien, dlaczego).

Możesz dodać linię, która pozwala zalogować się przy użyciu metody ident (peer in 9.2) (jeśli możesz użyć lokalnego konta systemowego o tej samej nazwie co użytkownik) dla lokalnych połączeń dla użytkownika lub (jeśli nie jest to możliwe) ustaw na „zaufanie” (bardzo tymczasowo!). Jeśli używasz zaufania, wycofaj się jak najszybciej, ponieważ oznacza to „zaufanie, że użytkownik jest tym, za kogo się podaje!” w związku z tym niebezpieczne jest pozostawienie włączonego poza natychmiastowymi potrzebami odzyskiwania.

Po zalogowaniu możesz zresetować hasło powyżej.

Chris Travers
źródło
Czy pgAdmin nie powinien wykonywać tej samej komendy?
dezso,
(zważywszy powiedziałem psql lub pgAdmin Co mogę zrobić, aby uczynić go bardziej zrozumiałym.?)
Chris Travers
Nie, nie, myślałem, że zmiana hasła w GUI robi to samo. Jeśli tak, nie mogę sobie wyobrazić, co może pójść nie tak?
dezso,
Co mogłoby pójść źle? Literówki w haśle na początek ...
Chris Travers,
Czy nie można po prostu ustawić hasła ponownie po zalogowaniu jako postgres?
dezso,
2

W przypadku wariantu Windows - również ten paskudny błąd wystąpił z powodu pgAdmin dla mojej instalacji Windows x64 w wersji 9.2. To sparaliżowało moją produkcję.

W folderze C:\Program Files\PostgreSQL\9.2\datalub C:\Program Files (x86)\PostgreSQL\9.**x**\dataznajdziesz plik tekstowy pg_hba.conf .

Znajdź następujące linie:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

i zmień METODĘ md5 na „ufaj” w ten sposób:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

Z Windows>Runtypu „services.msc” i [enter] znajdź odpowiednią instancję PostgreSQL i zrestartuj ją.

Twoje zabezpieczenia DB są teraz szeroko otwarte! Zwróć uwagę na ostrzeżenie, aby powrócić do md5 po zmianie czasu wygaśnięcia hasła użytkownika na rok 2099 dla wszystkich odpowiednich użytkowników.

Hoang Do
źródło
1

Jeśli jeszcze tego nie próbowałeś, sprawdź plik pg_hba.conf. Będzie się nazywać tak jak /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20); może być konieczne użycie polecenia „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.

AKTUALIZACJA 14.10.2016:

W systemie Ubuntu potrzebna jest nazwa pliku /etc/postgresql/9.5/main/pg_hba.conf. Tylko do testowania lokalnego , zmodyfikuj go tak, aby wyglądał następująco:

...
#
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
# local   all             all                                     peer
  local   all             all                                     trust
# IPv4 local connections:
# host    all             all             127.0.0.1/32            md5
  host    all             all             127.0.0.1/32            trust

Dwie linie z METODĄ „zaufanie” są nowe. Pozwalają ci łączyć się bez nazwy użytkownika / hasła.

Po zakończeniu konieczne będzie ponowne uruchomienie serwera za pomocą:

sudo systemctl restart postgresql 
Alan Thompson
źródło
Aby pg_hba.confzadziałało, potrzebujesz tylko ponownego załadowania, a nie ponownego uruchomienia. Co więcej, twoja sugestia wygląda na niepełną, ponieważ nie jest jasne, jak to rozwiązałoby problem na końcu.
dezso
1

Właśnie miałem ten sam problem i okazało się, że miałem wielu użytkowników o tej samej nazwie (różne przypadki). Kiedy połączyłem własność i usunąłem jedną, było to przynajmniej jasne. W zależności od metody połączenia sprawa niekoniecznie została przekazana do uwierzytelnienia.

Jerzy
źródło