Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
PostgreSQL
Błąd: no pg_hba.conf entry for host - jak skonfigurować dostęp
FATAL: no pg_hba.conf entry for host ... mimo poprawnego hasła i działającego serwera.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ę.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.
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 encryptionZwróć 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ł.
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.
sudo -u postgres psql -c "SHOW hba_file;" - typowo /etc/postgresql/16/main/pg_hba.conf lub w katalogu danych.host sklep app 192.168.1.0/24 scram-sha-256.trust (dostęp bez hasła) na połączeniach sieciowych - to metoda tylko do lokalnych testów. Do sieci wybieraj scram-sha-256.sudo -u postgres psql -c "SELECT pg_reload_conf();" lub sudo systemctl reload postgresql. Plik pg_hba.conf działa od razu po reload.pg_hba_file_rules (opisany w weryfikacji).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

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