GNU/Linux >> Tutoriales Linux >  >> Linux

Postgres no permite localhost pero funciona con 127.0.0.1

El problema

Postgres potencialmente usará IPv6 al especificar -h localhost que dado el anterior pg_hba.conf especifica ident , se devolverá una solicitud de contraseña.

Sin embargo, cuando -h 127.0.0.1 se especifica, obliga a Postgres a usar IPv4 , que se establece en trust en la configuración anterior y permite el acceso sin contraseña.

La respuesta

Por lo tanto, la respuesta es modificar la línea de host IPv6 en pg_hba.conf usar trust :

# IPv6 local connections:
host    all         all         ::1/128               trust

Recordar reiniciar el servicio de Postgres después de realizar cambios de configuración.


En pg_hba.conf, la primera coincidencia cuenta El manual:

El primer registro con un tipo de conexión, una dirección de cliente, una base de datos solicitada y un nombre de usuario coincidentes se utiliza para realizar la autenticación. consideró. Si ningún registro coincide, se deniega el acceso.

Tenga en cuenta el orden inverso :

host    all         all         127.0.0.1/32          trust
host    all         all         127.0.0.1/32          ident

Pero:

host    all         all        localhost             ident
host    all         all        localhost             trust

Recuerda recargar después de guardar los cambios en pg_hba.conf . (No es necesario reiniciar). El manual:

El pg_hba.conf el archivo se lee en el inicio y cuando el proceso del servidor principal recibe un SIGHUP señal. Si edita el archivo en un sistema activo, deberá señalar al administrador de correos (usando pg_ctl reload , llamando a la función SQL pg_reload_conf() , o usando kill -HUP ) para que vuelva a leer el archivo.

Si realmente "agregas" las líneas como escribiste, no debería haber ningún efecto. Pero si reemplazas las líneas, hay.

En el primer caso, obtienes trust método de autenticación, que es una política de puertas abiertas. El manual:

PostgreSQL asume que cualquiera que pueda conectarse al servidor está autorizado para acceder a la base de datos con cualquier nombre de usuario de la base de datos que especifique (incluso nombres de superusuario)

Pero en el segundo caso obtienes el ident método de autenticación, que debe configurarse correctamente para que funcione.

Además, como señaló Cas más tarde, localhost cubre tanto IPv4 como IPv6, mientras que 127.0.0.1/32 solo se aplica a IPv4.

Si en realidad está utilizando la versión 8.4 desactualizada, vaya al manual anterior para 8.4. ¿Sabe que 8.4 llegó a EOL en 2014 y ya no es compatible? Considere actualizar a una versión actual.

En Postgres 9.1 o posterior, preferiría usar peer que ident .

Más:

  • Ejecutar archivo por lotes con el comando psql sin contraseña

Linux
  1. ¿Bashscript funciona desde la terminal pero no desde Crontab?

  2. Descargar una imagen Funciona en Firefox pero no en Internet Explorer

  3. el comando sed con la opción -i falla en Mac, pero funciona en Linux

  4. Ejecute el script con rc.local:el script funciona, pero no al arrancar

  5. ¿Cómo solicito un archivo pero no lo guardo con Wget?

¿Qué es 127.0.0.1 Localhost?

¿Qué es Localhost?

Puede hacer ping/ssh a través de LAN pero no con Wi-Fi

Grep líneas que comienzan con 1, pero no 10, 11, 100, etc.

Permitir FTP con IPTables

¿No se puede conectar a MySQL usando 'localhost' pero usando '127.0.0.1' está bien?