Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
PostgreSQL
Jak ustawić i zmienić hasło administratora i użytkowników
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.
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.
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ą.
\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.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 '...';.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.SELECT pg_reload_conf(); albo z powłoki systemu odpowiednim poleceniem reload menedżera usług.\password postgres. To zwykle wystarczy i nie wymaga zatrzymywania bazy.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.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

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