Le problème
Postgres utilisera potentiellement IPv6 lors de la spécification de -h localhost
qui étant donné le pg_hba.conf
ci-dessus spécifie ident
, une invite de mot de passe sera renvoyée.
Cependant lorsque -h 127.0.0.1
est spécifié, il force Postgres à utiliser IPv4 , qui est défini sur trust
dans la configuration ci-dessus et autorise l'accès sans mot de passe.
La réponse
Ainsi, la réponse est de modifier la ligne d'hôte IPv6 dans pg_hba.conf
utiliser trust
:
# IPv6 local connections:
host all all ::1/128 trust
N'oubliez pas de redémarrer le service Postgres après avoir apporté des modifications à la configuration.
Dans pg_hba.conf, la première correspondance compte. Le manuel :
Le premier enregistrement avec un type de connexion, une adresse client, une base de données demandée et un nom d'utilisateur correspondants est utilisé pour effectuer l'authentification. considéré. Si aucun enregistrement ne correspond, l'accès est refusé.
Notez l'ordre inversé :
host all all 127.0.0.1/32 trust
host all all 127.0.0.1/32 ident
Mais :
host all all localhost ident
host all all localhost trust
N'oubliez pas de recharger après avoir enregistré les modifications dans pg_hba.conf
. (Le redémarrage n'est pas nécessaire.) Le manuel :
Le
pg_hba.conf
le fichier est lu au démarrage et lorsque le processus serveur principal reçoit unSIGHUP
signal. Si vous modifiez le fichier sur un système actif, vous devrez signaler le postmaster (en utilisantpg_ctl reload
,appelant la fonction SQLpg_reload_conf()
, ou en utilisantkill -HUP
) pour lui faire relire le fichier.
Si vous "ajoutez" vraiment les lignes comme vous l'avez écrit, il ne devrait y avoir aucun effet du tout. Mais si vous remplacez les lignes, il y en a.
Dans le premier cas, vous obtenez trust
méthode d'authentification, qui est une politique de la porte ouverte. Le manuel :
PostgreSQL suppose que toute personne pouvant se connecter au serveur est autorisée à accéder à la base de données avec le nom d'utilisateur de la base de données qu'elle spécifie (même les noms de superutilisateur)
Mais dans le second cas vous obtenez le ident
méthode d'authentification, qui doit être configurée correctement pour fonctionner.
De plus, comme Cas l'a souligné plus tard, localhost
couvre à la fois IPv4 et IPv6, tandis que 127.0.0.1/32
ne s'applique qu'à IPv4.
Si vous utilisez actuellement la version obsolète 8.4, consultez l'ancien manuel de la version 8.4. Vous savez que 8.4 a atteint la fin de vie en 2014 et n'est plus supporté ? Envisagez de passer à une version actuelle.
Dans Postgres 9.1 ou version ultérieure, vous préférez utiliser peer
supérieur à ident
.
Plus :
- Exécuter le fichier batch avec la commande psql sans mot de passe