conectarse al servidor PostgreSQL: FATAL: no hay entrada pg_hba.conf para el host

178

Hola, estoy tratando de ejecutar un sitio web que me enviaron, pero después de hacerlo, apareció este error

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

después de buscarlo en Google , dice que solo necesito agregar una entrada en el archivo pg_hba.conf para ese usuario en particular. Este es mi archivo 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

pero después de hacerlo, el error aún persiste. Reinicié mi servidor XAMPP varias veces pero no aparece ningún cambio. Gracias por adelantado

Jin
fuente
¿Reinició PostgreSQL por sí mismo, no solo el servidor web? Tratar SELECT pg_reload_conf().
Craig Ringer

Respuestas:

220

Agregue o edite la siguiente línea en su postgresql.conf:

listen_addresses = '*'

Agregue la siguiente línea como la primera línea de pg_hba.conf. Permite el acceso a todas las bases de datos para todos los usuarios con una contraseña cifrada:

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

Reinicie Postgresql después de agregar esto con service postgresql restarto el comando equivalente para su configuración.

Jérôme Radix
fuente
55
Tenga en cuenta que para que esto funcione, se debe haber establecido una contraseña para el usuario : sudo -u <username> psql postgresluego, \passworden el indicador sql resultante, se le solicitará que establezca una.
ijoseph
2
No olvide reiniciar postgresql después de agregar esto: service postgresql restart
ammills01
Si desea un poco de seguridad adicional que limite las conexiones a dominios privados (como dentro de una oficina y no al resto de Internet), puede cambiar el primer número a 10, 172 o 192 para que coincida con su red: por ejemplo 172.0. 0.0 / 0 en lugar de 0.0.0.0/0
Nate Wanner
22

Esta solución funciona para IPv4 / IPv6

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

agregar al final

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

y luego reinicie el servicio postgresql

/etc/init.d/postgresql restart
Jose Nobile
fuente
12

La forma en que resolví esto fue:

Se agregó la línea de la siguiente manera en pg_hba.conf:

hostnossl    all          all            0.0.0.0/0  trust        

y esto fue modificado en postgresql.conf, como se muestra:

listen_addresses = '*'  

Tuve esta instancia ejecutándose en un Centos 7.3 y Postgres 9.5 en una VM en Azure , dado que este era un POC (prueba de concepto) que no querrá conectar sin SSL en su entorno de producción real.

Para conectarme a la instancia, estaba usando pgAdmin 4 en macOS Sierra .

Roberto Lopez
fuente
44
No solo SSL ... en cualquier cosa que no sea una prueba de concepto y sea accesible para la red, no confiaría en las conexiones, necesitaría alguna autenticación .
joanolo
5

Instalación fresca de Postgres 9.5, Ubuntu.

La clave era el tipo de conexión local , ya que psql usa una conexión de socket de dominio.

pg_hba.conf

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

Tuve el mismo error cuando intenté conectarme a una base de datos local usando un túnel SSH. Lo resolví cambiando el nombre de host de localhosta 127.0.0.1.

Finura
fuente
3
  1. Agregue la siguiente línea en la parte inferior de pg_hba.conf:

    hostnossl all all 0.0.0.0/0 md5

  2. Agregar / modificar la línea en postgresql.conf:

    listen_addresses = '*'

  3. ASEGÚRESE DE QUE el usuario que se está conectando tiene una contraseña: (Ejemplo de usuario de conexión llamado postgres)

    a. Ejecute el siguiente psqlcomando con la postgrescuenta de usuario:

    sudo -u postgres psql postgres

    si. Establece la contraseña:

    # \password postgres

ingrese la descripción de la imagen aquí

nguyên
fuente
1
No use la confianza para conexiones remotas
eckes
2

Encuentra el archivo de configuración correcto:

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

Agregue lo siguiente al final del archivo:

local all all peer

Luego reinicie su aplicación PostgreSQL:

/bin/systemctl restart postgresql*.service
Feriman
fuente
1

En mi caso, tuve que agregar la línea exacta según lo sugerido por la información del error. No se puede omitir agregando "todos" los usuarios con todas las IP como regla. Ahora es como:

PosgreSQL 10.5 en CentOS 7.

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

Esto a continuación funcionó para mí: (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

confiar

Permitir la conexión incondicionalmente. Este método permite que cualquiera que pueda conectarse al servidor de base de datos PostgreSQL inicie sesión como cualquier usuario PostgreSQL que desee, sin la necesidad de una contraseña o cualquier otra autenticación.

md5

Solicite al cliente que proporcione una contraseña con doble hash MD5 para la autenticación.

refiera para más aquí

Ravistm
fuente
0

Instrucciones para usuarios de Debian.

Inicie sesión como usuario posgres:

$ sudo su - postgres

Obtenga la ubicación de pg_hba.conf consultando la base de datos:

$ psql -c "SHOW hba_file;"

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

Abra pg_hba.conf:

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

Agregue la configuración donde dice "Ponga su configuración real aquí":

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

Cerrar sesión a su usuario:

$ exit
logout

Reinicie su servidor postgres para que los cambios surtan efecto:

$ sudo systemctl restart postgresql
Eugene Kulabuhov
fuente
-1

Funciona para mí solo agregando la siguiente configuración:

# 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
navjyot verma
fuente
-4

Simplemente escriba la siguiente secuencia en el archivo de configuración:

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

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

Esto es todo. El archivo db-configcontiene los datos de especificación del host, usuario, contraseña y base de datos. Con este pequeño cambio, funciona perfectamente tanto a nivel local como en un servicio de pase (Heroku). Completamente probado

Jose Arredondo
fuente
¿Qué (y dónde) es esto db-config? ¿Es un archivo de configuración XAMPP?
ypercubeᵀᴹ