Blog JSystems - uwalniamy wiedzę!

Szukaj

PostgreSQL

Jak ustawić i zmienić hasło administratora i użytkowników

W skrócie

  • Nie wiesz, jak ustawić lub zmienić hasło konta postgres albo zwykłego użytkownika, a przy okazji hasło ląduje w historii poleceń serwera.
  • Hasło to atrybut roli i zmienia się je poleceniem ALTER ROLE, ale sposób logowania musi jeszcze dopuścić plik pg_hba.conf.
  • Ustaw hasło bezpiecznie przez \password w psql, a jeśli zablokowałeś się na koncie postgres - użyj lokalnego dostępu przez peer albo trybu single-user.

Zarządzanie hasłami w PostgreSQL bywa mylące, bo nie ma jednego "hasła do bazy". Każda rola ma własne hasło, a to, czy w ogóle jest ono wymagane przy logowaniu, decyduje osobny plik konfiguracyjny. Do tego łatwo o wpadkę: wpisujesz hasło wprost w poleceniu SQL i zostaje ono w logach oraz w historii serwera. Pokażemy, jak zrobić to poprawnie i co robić, gdy zgubisz dostęp do superużytkownika.

Jak to wygląda w praktyce

Typowa sytuacja: świeża instalacja, chcesz ustawić hasło kontu postgres, żeby móc łączyć się z zewnątrz. Albo dostajesz zgłoszenie, że aplikacyjne konto ma wygasłe hasło i połączenia zaczęły padać z komunikatem "password authentication failed for user". Bywa gorzej - ktoś zmienił hasło superużytkownika i nikt go nie zapisał, a teraz nie da się w ogóle zalogować jako administrator. Osobny objaw to świadomość ryzyka: ustawiasz hasło poleceniem ALTER ROLE ... PASSWORD 'jawnetekst' i orientujesz się, że właśnie zapisałeś je czystym tekstem w logu serwera i w historii sesji.

Dlaczego tak się dzieje

Hasło jest w PostgreSQL atrybutem roli, więc naturalnie zmienia się je przez ALTER ROLE. Problem w tym, że gdy podasz hasło jawnie w treści polecenia, trafia ono do logów zapytań i do historii psql - baza po swojej stronie i tak przechowuje je jako skrót, ale sam moment ustawiania zostaje zapisany otwartym tekstem. Druga rzecz to plik pg_hba.conf: to on decyduje, jaka metoda uwierzytelniania obowiązuje dla danego połączenia. Jeśli dla połączeń lokalnych ustawiono metodę peer albo trust, hasło nie jest w ogóle sprawdzane, więc jego ustawianie nie da spodziewanego efektu przy logowaniu z tej samej maszyny. A gdy zgubisz hasło superużytkownika, blokada bierze się stąd, że bez ważnych danych logowania nie wykonasz żadnego ALTER ROLE - trzeba wejść inną furtką.

Jak to rozwiązać krok po kroku

  1. Ustaw lub zmień hasło bezpiecznie z poziomu psql poleceniem \password nazwa_roli. Klient zapyta o hasło interaktywnie i wyśle je już jako skrót - nie pojawi się ono w historii ani w logu serwera.
  2. Jeśli musisz zrobić to poleceniem SQL, użyj ALTER ROLE aplikacja PASSWORD 'noweHaslo';, ale rób to świadomie i pamiętaj, że jawny tekst może trafić do logów. Dla konta postgres analogicznie ALTER ROLE postgres PASSWORD '...';.
  3. Sprawdź, czy metoda uwierzytelniania w pg_hba.conf wymaga hasła. Dla logowania przez sieć powinno być scram-sha-256. Jeśli chcesz wymusić najnowszy, mocniejszy algorytm skrótu, ustaw w postgresql.conf password_encryption = scram-sha-256 i ustaw hasło ponownie, żeby zapisało się nowym algorytmem.
  4. Po zmianach w pg_hba.conf przeładuj konfigurację bez restartu: SELECT pg_reload_conf(); albo z powłoki systemu odpowiednim poleceniem reload menedżera usług.
  5. Gdy zgubiłeś hasło superużytkownika, wejdź lokalnie kontem systemowym postgres, dla którego zwykle działa metoda peer, i wtedy spokojnie ustaw nowe hasło przez \password postgres. To zwykle wystarczy i nie wymaga zatrzymywania bazy.
  6. Jeśli i to jest zablokowane, ostatnią furtką jest tryb single-user: zatrzymaj serwer i uruchom postgres --single na danym katalogu danych, po czym w tym trybie wykonaj ALTER ROLE. To rozwiązanie awaryjne, robione przy wyłączonej normalnej pracy bazy.

Jak sprawdzić, że zadziałało

Najprostszy test to po prostu zalogować się nowym hasłem: psql -h host -U nazwa_roli baza i sprawdzić, czy połączenie przechodzi. Datę ostatniej zmiany oraz ewentualny termin ważności hasła zobaczysz w widoku pg_authid w kolumnie rolvaliduntil (dostępnym tylko dla superużytkownika). Jeśli zależało Ci na przejściu na scram-sha-256, zajrzyj do tego samego widoku - skrót hasła zaczyna się wtedy od przedrostka wskazującego ten algorytm, a nie od starego md5. Warto też przejrzeć log serwera, żeby upewnić się, że nie zostawiłeś w nim jawnego hasła.

Wróć do listy: 100 najczęstszych pytań i problemów z PostgreSQL

Szkolenie Administracja, replikacja i tuning baz danych 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

Szkolenie Zaawansowana administracja PostgreSQL - HA, DR, monitoring, skalowanie

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

Najczęściej zadawane pytania

Jak zmienić hasło użytkownika, żeby nie trafiło do logów?
Użyj w psql polecenia \password nazwa_roli. Klient poprosi o hasło interaktywnie i wyśle je do serwera już jako skrót, więc nie pojawi się ani w historii poleceń, ani w logu zapytań. To bezpieczniejsze niż ALTER ROLE z hasłem wpisanym jawnie w treści polecenia.
Zablokowałem się na koncie postgres - jak odzyskać dostęp?
Najpierw spróbuj zalogować się lokalnie kontem systemowym postgres, bo dla połączeń lokalnych zwykle działa metoda peer, która nie wymaga hasła. Wtedy ustawisz nowe hasło przez \password postgres. Jeśli i to jest zablokowane, ostatnią furtką jest tryb single-user uruchamiany na zatrzymanej bazie.
Dlaczego ustawiłem hasło, a logowanie i tak go nie wymaga?
Bo o metodzie uwierzytelniania decyduje plik pg_hba.conf, a nie samo istnienie hasła. Jeśli dla danego połączenia ustawiono trust albo peer, hasło nie jest w ogóle sprawdzane. Żeby hasło było wymagane przy połączeniu przez sieć, ustaw dla niego metodę scram-sha-256 i przeładuj konfigurację.
Jak wymusić w PostgreSQL mocniejszy algorytm szyfrowania hasła?
Ustaw w postgresql.conf parametr password_encryption na scram-sha-256, przeładuj konfigurację, a następnie ustaw hasła ponownie - dopiero wtedy zapiszą się nowym algorytmem. Stare hasła zapisane wcześniej jako md5 nie zmienią się same, trzeba je nadać na nowo, żeby przeszły na nowszy schemat.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...