connettersi al server PostgreSQL: FATAL: nessuna voce pg_hba.conf per l'host


178

Ciao, sto cercando di eseguire un sito Web che mi è stato inviato, ma dopo aver fatto ciò è apparso questo errore

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

dopo aver cercato su Google dice che devo solo aggiungere una voce nel file pg_hba.conf per quel particolare utente. questo è il mio file 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

ma dopo averlo fatto, l'errore persiste ancora. Ho riavviato il mio server XAMPP più volte ma non vengono visualizzate modifiche. Grazie in anticipo


Hai riavviato PostgreSQL da solo, non solo il web server? Prova SELECT pg_reload_conf().
Craig Ringer,

Risposte:


220

Aggiungi o modifica la seguente riga nel tuo postgresql.conf:

listen_addresses = '*'

Aggiungi la seguente riga come prima riga di pg_hba.conf. Consente l'accesso a tutti i database per tutti gli utenti con una password crittografata:

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

Riavvia Postgresql dopo averlo aggiunto con service postgresql restarto con il comando equivalente per la tua configurazione.


5
Si noti che per far funzionare tutto questo, una password deve essere stato impostato per l'utente : sudo -u <username> psql postgres, quindi \passwordal prompt SQL risultante verrà chiesto di impostare uno.
ijoseph,

2
Non dimenticare di riavviare postgresql dopo aver aggiunto questo: servizio postgresql restart
ammills01

Se vuoi un po 'di sicurezza in più limitando le connessioni a domini privati ​​(come all'interno di un ufficio, e non il resto di Internet), puoi cambiare il primo numero in 10, 172 o 192 in modo che corrisponda alla tua rete: ad esempio 172.0. 0.0 / 0 invece di 0.0.0.0/0
Nate Wanner,

22

Questa soluzione funziona per IPv4 / IPv6

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

aggiungere alla finale

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

e quindi riavviare il servizio postgresql

/etc/init.d/postgresql restart

12

Il modo in cui ho risolto questo è stato:

Aggiunta la riga come di seguito in pg_hba.conf:

hostnossl    all          all            0.0.0.0/0  trust        

e questo è stato modificato in postgresql.conf, come mostrato:

listen_addresses = '*'  

Ho avuto questa istanza in esecuzione su Centos 7.3 e Postgres 9.5 in una macchina virtuale in Azure , dato che si trattava di un POC (proof of concept) che non vorrai connetterti senza SSL nel tuo vero ambiente di produzione.

Per connettermi all'istanza stavo usando pgAdmin 4 su macOS Sierra .


4
Non solo SSL ... su tutto ciò che non è una prova di concetto ed è la rete acessible, non si fidare di collegamenti, si richiederebbe un po ' di autenticazione .
joanolo,

5

Installazione di Postgres 9.5, Ubuntu.

La chiave era il tipo di connessione locale , poiché psql utilizza una connessione socket di dominio.

pg_hba.conf

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

3

Ho avuto lo stesso errore quando ho provato a connettermi a un database locale usando un tunnel SSH. L'ho risolto cambiando il nome host da localhosta 127.0.0.1.


3
  1. Aggiungi la seguente riga in fondo a pg_hba.conf:

    hostnossl all all 0.0.0.0/0 md5

  2. Aggiungi / modifica la riga in postgresql.conf:

    listen_addresses = '*'

  3. ASSICURARSI che l'utente che sta effettuando la connessione disponga di una password: (Esempio di connessione dell'utente chiamato postgres)

    un. Esegui il psqlcomando seguente con l' postgresaccount utente:

    sudo -u postgres psql postgres

    b. Imposta la password:

    # \password postgres

inserisci qui la descrizione dell'immagine


1
Non usare la fiducia per le connessioni remote
verifica il

2

Trova il file di configurazione corretto:

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

Aggiungi quanto segue alla fine del file:

local all all peer

Quindi riavvia l'applicazione PostgreSQL:

/bin/systemctl restart postgresql*.service

1

Nel mio caso, ho dovuto aggiungere la riga esatta come suggerito dalle informazioni di errore. Impossibile ignorarlo aggiungendo "tutti" gli utenti con tutti gli IP come regola. Ora è come:

PosgreSQL 10.5 su 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

Questo sotto ha funzionato per me: (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

fiducia

Consenti la connessione incondizionatamente. Questo metodo consente a chiunque sia in grado di connettersi al server di database PostgreSQL di accedere come qualsiasi utente PostgreSQL desidera, senza la necessità di una password o di qualsiasi altra autenticazione.

md5

Richiede al client di fornire una password con doppio hash MD5 per l'autenticazione.

per ulteriori informazioni qui


0

Istruzioni per utenti Debian.

Accedi come utente posgres:

$ sudo su - postgres

Ottieni la posizione di pg_hba.conf eseguendo una query sul database:

$ psql -c "SHOW hba_file;"

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

Apri pg_hba.conf:

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

Aggiungi la configurazione dove dice "Inserisci qui la tua configurazione attuale":

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

Esci dal tuo utente:

$ exit
logout

Riavvia il tuo server postgres per rendere effettive le modifiche:

$ sudo systemctl restart postgresql

-1

Funziona solo aggiungendo la seguente configurazione:

# 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

Basta scrivere la seguente sequenza nel file di configurazione:

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

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

Questo è tutto. Il file db-configcontiene i dati delle specifiche dell'host, dell'utente, della password e del database. Con questa piccola modifica funziona perfettamente sia localmente che in un servizio pass (Heroku). Completamente testato


Cosa (e dove) è questo db-config? È un file di configurazione XAMPP?
ypercubeᵀᴹ
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.