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