połącz się z serwerem PostgreSQL: FATAL: brak wpisu pg_hba.conf dla hosta


178

Witaj Próbuję uruchomić stronę internetową przesłaną do mnie, ale po wykonaniu tej czynności pojawił się ten błąd

connect to PostgreSQL server: FATAL: no pg_hba.conf entry for host "4X.XXX.XX.XXX", user "userXXX", database "dbXXX", SSL off in C:\xampp\htdocs\xmastool\index.php on line 37

po Googlingu napisano, że muszę tylko dodać wpis w pliku pg_hba.conf dla tego konkretnego użytkownika. to jest mój plik pg_hba.conf.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# IPv4 local connections:
local dbXXX userXXX md5
host    dbXXX  userXXX  XX.XXX.XXX.XXX           md5
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

ale po wykonaniu tej czynności błąd nadal występuje. Zrestartowałem mój serwer XAMPP kilka razy, ale nie pojawiają się żadne zmiany. Z góry dziękuję


Czy zrestartowałeś PostgreSQL, ale nie tylko serwer WWW? Spróbować SELECT pg_reload_conf().
Craig Ringer

Odpowiedzi:


220

Dodaj lub edytuj następujący wiersz w postgresql.conf:

listen_addresses = '*'

Dodaj następujący wiersz jako pierwszy wiersz pg_hba.conf. Umożliwia dostęp do wszystkich baz danych wszystkim użytkownikom zaszyfrowanym hasłem:

# TYPE DATABASE USER CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5

Uruchom ponownie Postgresql po dodaniu tego za pomocą service postgresql restartlub równoważnego polecenia dla twojej instalacji.


5
Zauważ, że to zadziałało, hasło musi być ustawiony dla użytkownika : sudo -u <username> psql postgres, a następnie \passwordw powstałej wierszu sql poprosi o ustawienie jednego.
ijoseph

2
Nie zapomnij zrestartować postgresql po dodaniu tego: usługa restart postgresql
ammills01 24.10.2018

Jeśli chcesz trochę dodatkowego zabezpieczenia ograniczającego połączenia z domenami prywatnymi (np. W biurze, a nie z resztą Internetu), możesz zmienić pierwszy numer na 10, 172 lub 192, aby pasował do Twojej sieci: na przykład 172.0. 0,0 / 0 zamiast 0,0,0,0/0
Nate Wanner

22

To rozwiązanie działa w przypadku IPv4 / IPv6

nano /var/lib/pgsql/data/pg_hba.conf

dodaj na końcu

host all all      ::1/128      md5
host all postgres 127.0.0.1/32 md5

a następnie uruchom ponownie usługę postgresql

/etc/init.d/postgresql restart

12

Sposób, w jaki to rozwiązałem, to:

Dodano wiersz jak poniżej w pg_hba.conf:

hostnossl    all          all            0.0.0.0/0  trust        

i to zostało zmodyfikowane postgresql.conf, jak pokazano:

listen_addresses = '*'  

Miałem tę instancję działającą na Centos 7.3 i Postgres 9.5 na maszynie wirtualnej na platformie Azure , biorąc pod uwagę, że był to POC (dowód koncepcji), z którym nie będziesz chciał się łączyć bez protokołu SSL w swoim rzeczywistym środowisku produkcyjnym.

Aby połączyć się z instancją, używałem pgAdmin 4 na macOS Sierra .


4
SSL nie tylko ... na wszystko, co nie jest dowodem koncepcji i jest dostepny za posrednictwem sieci, nie byłoby zaufać połączeń, jakich można wymagać pewnej uwierzytelniania .
joanolo

5

Świeża instalacja Postgres 9.5, Ubuntu.

Kluczem był lokalny typ połączenia, ponieważ psql używa połączenia gniazda domeny.

pg_hba.conf

# TYPE DATABASE USER CIDR-ADDRESS  METHOD
local all all md5
host  all  all 0.0.0.0/0 md5

3

Miałem ten sam błąd, gdy próbowałem połączyć się z lokalną bazą danych za pomocą tunelu SSH. Rozwiązałem go, zmieniając nazwę hosta z localhostna 127.0.0.1.


3
  1. Dodaj następujący wiersz na dole pg_hba.conf:

    hostnossl all all 0.0.0.0/0 md5

  2. Dodaj / zmodyfikuj linię w postgresql.conf:

    listen_addresses = '*'

  3. UPEWNIJ SIĘ, ŻE łączący się użytkownik ma hasło: (Przykład połączenia o nazwie użytkownik postgres)

    za. Uruchom następujące psqlpolecenie z postgreskontem użytkownika:

    sudo -u postgres psql postgres

    b. Ustaw hasło:

    # \password postgres

wprowadź opis zdjęcia tutaj


1
Nie używaj zaufania do połączeń zdalnych
eckes

2

Znajdź odpowiedni plik konfiguracyjny:

su - postgres -c "psql -t -P format=unaligned -c 'show hba_file';"

Dodaj następujące na końcu pliku:

local all all peer

Następnie uruchom ponownie aplikację PostgreSQL:

/bin/systemctl restart postgresql*.service

1

W moim przypadku musiałem dodać dokładny wiersz, jak sugerują informacje o błędzie. Nie można tego obejść, dodając „wszystkich” użytkowników ze wszystkimi adresami IP z reguły. Teraz jest jak:

PosgreSQL 10.5 na CentOS 7.

# IPv4 local connections:
host    all             all             127.0.0.1/32                    md5
host    <db_name>       postgres        <my_client_machine_ip>/32       md5

1

To poniżej działało dla mnie: (pg_hba.conf)

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only     
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             0.0.0.0/0               trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
host    all             all             0.0.0.0/0               trust

zaufanie

Zezwól na połączenie bezwarunkowo. Ta metoda pozwala każdemu, kto może połączyć się z serwerem bazy danych PostgreSQL, na zalogowanie się jako dowolny użytkownik PostgreSQL, bez potrzeby podawania hasła lub innego uwierzytelnienia.

md5

Wymagaj od klienta podania podwójnego hasła z haszowaniem MD5 w celu uwierzytelnienia.

więcej informacji tutaj


0

Instrukcje dla użytkowników Debiana.

Zaloguj się jako użytkownik posgres:

$ sudo su - postgres

Uzyskaj lokalizację pliku pg_hba.conf, sprawdzając bazę danych:

$ psql -c "SHOW hba_file;"

              hba_file               
-------------------------------------
/etc/postgresql/11/main/pg_hba.conf
(1 row)

Otwórz pg_hba.conf:

nano /etc/postgresql/11/main/pg_hba.conf

Dodaj konfigurację tam, gdzie jest napisane „Umieść swoją aktualną konfigurację tutaj”:

# TYPE DATABASE USER CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5

Wyloguj się do użytkownika:

$ exit
logout

Uruchom ponownie serwer Postgres, aby zmiany odniosły skutek:

$ sudo systemctl restart postgresql

-1

Działa dla mnie tylko dodając poniższą konfigurację:

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


-4

Po prostu napisz następującą sekwencję w pliku konfiguracyjnym:

const 
  pg                = require('pg'),
config          = require('./db-config'),
    dbOption    = {
      host    : ,
      port    : ,
      user    : ,
      password  :,
      database  : 
    },

  pool          = new pg.Pool(dbOption)
  pg.defaults.ssl = true;

To wszystko. Plik db-configzawiera dane specyfikacji hosta, użytkownika, hasła i bazy danych. Dzięki tej małej zmianie działa doskonale zarówno lokalnie, jak i w usłudze pass (Heroku). W pełni przetestowane.


Co to (i gdzie) to jest db-config? Czy to plik konfiguracyjny XAMPP?
ypercubeᵀᴹ
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.