Blog JSystems - uwalniamy wiedzę!

Szukaj

PostgreSQL

Błąd: no pg_hba.conf entry for host - jak skonfigurować dostęp

W skrócie

  • Problem: połączenie kończy się FATAL: no pg_hba.conf entry for host ... mimo poprawnego hasła i działającego serwera.
  • Dlaczego: plik pg_hba.conf to lista reguł - kto, z jakiego adresu, do której bazy i jaką metodą może się zalogować. Brak pasującej reguły oznacza odmowę.
  • Rozwiązanie: dopisujemy precyzyjną regułę (adres, baza, użytkownik, metoda uwierzytelniania) i przeładowujemy konfigurację bez restartu.

Ten błąd oznacza, że serwer działa i widzi Twoje połączenie, ale nie ma reguły, która by je dopuściła. pg_hba.conf (skrót od host-based authentication, czyli uwierzytelnianie na podstawie hosta) to brama wejściowa PostgreSQL - decyduje, kto i skąd może się połączyć, jeszcze zanim sprawdzane jest hasło. Dotyczy Cię to zawsze przy pierwszym połączeniu z nowej maszyny albo nowego użytkownika. Pokazujemy, jak dodać regułę bezpiecznie i bez otwierania bazy na cały świat.

Jak to wygląda w praktyce

Przy próbie połączenia z sieci lub jako nowy użytkownik dostajesz:

$ psql -h 192.168.1.50 -U app -d sklep
psql: error: connection to server at "192.168.1.50", port 5432 failed:
FATAL:  no pg_hba.conf entry for host "192.168.1.77", user "app", database "sklep", no encryption

Zwróć uwagę, że serwer podaje dokładnie cztery dane, których szukał w regułach - adres klienta, użytkownika, bazę i to, czy połączenie jest szyfrowane. Żaden wiersz w pg_hba.conf nie pasował do tej kombinacji, więc połączenie zostało odrzucone. To co innego niż connection refused - tu serwer już odpowiedział.

Dlaczego tak się dzieje

Przy każdym połączeniu PostgreSQL czyta pg_hba.conf od góry do dołu i szuka pierwszej reguły pasującej do czterech kryteriów - typu połączenia (local dla gniazda uniksowego, host dla TCP/IP), bazy, użytkownika i adresu źródłowego. Pierwsza pasująca reguła decyduje o metodzie uwierzytelniania (na przykład scram-sha-256, md5, peer, trust). Jeśli żadna reguła nie pasuje - a domyślna konfiguracja dopuszcza zwykle tylko połączenia lokalne - serwer zwraca no pg_hba.conf entry. Kluczowe jest to, że liczy się kolejność - pierwszy trafiony wiersz wygrywa, a szersza reguła umieszczona wyżej może przesłonić węższą poniżej.

Jak to rozwiązać krok po kroku

  1. Znajdź ścieżkę pliku: sudo -u postgres psql -c "SHOW hba_file;" - typowo /etc/postgresql/16/main/pg_hba.conf lub w katalogu danych.
  2. Dopisz precyzyjną regułę dla konkretnej bazy, użytkownika i podsieci, na przykład dla klienta z 192.168.1.0/24: host sklep app 192.168.1.0/24 scram-sha-256.
  3. Nie używaj metody trust (dostęp bez hasła) na połączeniach sieciowych - to metoda tylko do lokalnych testów. Do sieci wybieraj scram-sha-256.
  4. Pilnuj kolejności - regułę wstaw tak, by wcześniejszy, szerszy wiersz jej nie przesłonił. Pierwszy pasujący wiersz jest wiążący.
  5. Przeładuj konfigurację bez restartu serwera: sudo -u postgres psql -c "SELECT pg_reload_conf();" lub sudo systemctl reload postgresql. Plik pg_hba.conf działa od razu po reload.
  6. Sprawdź, która reguła faktycznie zadziała, zanim połączysz się klientem - służy do tego widok pg_hba_file_rules (opisany w weryfikacji).

Jak sprawdzić, że zadziałało

Po reload podejrzyj wczytane reguły i ewentualne błędy składni w samym serwerze, bez ruszania pliku:

SELECT line_number, type, database, user_name, address, auth_method, error
FROM pg_hba_file_rules
ORDER BY line_number;

Kolumna error powinna być pusta (NULL). Następnie połącz się z maszyny klienta - jeśli serwer poprosi o hasło zamiast zwrócić no pg_hba.conf entry, reguła działa:

$ psql -h 192.168.1.50 -U app -d sklep

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

Czym jest plik pg_hba.conf i za co odpowiada?
To plik reguł dostępu, gdzie skrót hba oznacza host-based authentication. Określa, kto z jakiego adresu, do której bazy i przy użyciu jakiej metody uwierzytelniania może się połączyć. Serwer czyta go przy każdym połączeniu i stosuje pierwszą pasującą regułę. Brak pasującego wiersza kończy się błędem no pg_hba.conf entry, jeszcze zanim sprawdzone zostanie hasło użytkownika.
Dlaczego kolejność wierszy w pg_hba.conf ma znaczenie?
PostgreSQL czyta reguły z góry na dół i stosuje pierwszą, która pasuje do typu połączenia, bazy, użytkownika i adresu. Dalsze wiersze nie są już sprawdzane. Dlatego szeroka reguła umieszczona wysoko może przesłonić węższą, bardziej precyzyjną poniżej. Reguły układaj od najbardziej szczegółowych, a metody typu trust trzymaj z dala od połączeń sieciowych.
Czy po zmianie pg_hba.conf trzeba restartować serwer?
Nie - pg_hba.conf jest wczytywany ponownie przy reload. Wystarczy SELECT pg_reload_conf() albo systemctl reload postgresql i nowe reguły obowiązują natychmiast, bez zrywania istniejących sesji. Restart potrzebny jest tylko dla nielicznych parametrów z postgresql.conf, takich jak listen_addresses czy shared_buffers, ale nie dla samych reguł dostępu.
Jaką metodę uwierzytelniania wybrać dla połączeń z sieci?
Dla połączeń sieciowych zalecana jest scram-sha-256 - to nowoczesny, bezpieczny mechanizm hasła, domyślny od PostgreSQL 14. Starsze md5 jest słabsze i warto z niego zejść. Metody trust (bez hasła) oraz peer (mapowanie na użytkownika systemu) nadają się wyłącznie do lokalnych, zaufanych połączeń, nigdy do ruchu przychodzącego z sieci.

Komentarze (0)

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

Brak komentarzy...