GNU/Linux >> Tutoriels Linux >  >> Linux

Postgres n'autorise pas localhost mais fonctionne avec 127.0.0.1

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 un SIGHUP signal. Si vous modifiez le fichier sur un système actif, vous devrez signaler le postmaster (en utilisant pg_ctl reload ,appelant la fonction SQL pg_reload_conf() , ou en utilisant kill -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

Linux
  1. Un script peut-il être exécutable mais pas lisible ?

  2. Télécharger une image Fonctionne dans FireFox mais pas dans Internet Explorer

  3. La commande "ntpq -pn" renvoie l'erreur "Nom ou service inconnu"

  4. Pourquoi Tomcat fonctionne-t-il avec le port 8080 mais pas 80 ?

  5. Pycharm tensorflow ImportError mais fonctionne bien avec Terminal

Qu'est-ce que l'hôte local 127.0.0.1 ?

Qu'est-ce que Localhost ?

Peut ping/ssh via LAN mais pas avec Wi-Fi

Puis-je faire aveuglément confiance à 127.0.0.1 ?

Lignes Grep commençant par 1, mais pas 10, 11, 100, etc.

Autoriser FTP avec IPTables