130 votes

Connexion Django à PostgreSQL: "L'authentification entre homologues a échoué"

OperationalError at /admin/

FATAL:  Peer authentication failed for user "myuser"

C'est l'erreur que je reçois lorsque j'essaie d'accéder à mon site d'administration de Django. J'avais été en utilisant des bases de données MySQL, pas de problème. Je suis nouveau sur PostgreSQL, mais a décidé de passer en raison de l'hôte que j'ai finalement l'intention d'utiliser pour ce projet ne dispose pas de MySQL.

Donc, j'ai pensé que je pouvais passer par le processus de l'installation de PostgreSQL, exécuter un syncdb et être tous ensemble.

Le problème est que je n'arrive pas à obtenir mon appli pour se connecter à la base de données. Je peux me connecter à PostgreSQL via la ligne de commande ou l'application de bureau que j'ai téléchargé. Tout simplement pas dans le script.

Aussi, je peux l'utiliser manage.py coque pour accéder à la db à l'amende juste.

Toutes les pensées?

250voto

Ahop Points 1551

J'ai jeté un coup d'oeil à l'exception, j'ai remarqué que cela avait à voir avec mes paramètres de connexion. Je suis retourné à settings.py et j'ai vu que je n'avais pas de configuration d'hôte. Ajoutez "localhost" et le tour est joué.

Mon fichier settings.py n’avait pas de base de données HOST for MySQL, mais je devais en ajouter une pour que PostgreSQL puisse fonctionner.

Dans mon cas, j'ai ajouté "localhost" au paramètre host et cela a fonctionné.

30voto

clime Points 2431

C'est probablement parce que votre script est en cours d'exécution en vertu d'un autre utilisateur que celui que vous tentez de vous connecter avec (myuser ici). Dans ce cas, les pairs à l'authentification échoue. Votre solution avec HOST: "localhost" fonctionne parce que vous n'êtes pas à l'aide par les pairs auth plus. Cependant, il est plus lent que d' HOST: "" , car au lieu d'utiliser les sockets unix, vous utilisez des connexions TCP. De django docs:

Si vous utilisez PostgreSQL, par défaut vide (l'HÔTE), la connexion à la base de données se fait à travers des sockets de domaine UNIX (‘local' lignes pg_hba.conf). Si vous souhaitez vous connecter via les sockets TCP, jeu de l'HÔTE ‘localhost " ou "127.0.0.1' (‘host' lignes dans pg_hba.conf). Sur Windows, vous devez toujours définir l'HÔTE, comme les sockets de domaine UNIX ne sont pas disponible.

Si vous souhaitez continuer à utiliser les sockets, corriger les réglages en pg_hba.conf sont nécessaires. Le plus simple c'est:

local   all         all                               trust

tout en commentant tous les autres local des lignes dans le fichier de configuration. Notez que le rechargement de postgres est nécessaire pour que cette modification prenne effet.

Mais si le multi-utilisateur de la machine de production est en question, vous pouvez utiliser quelque chose de plus sûr, comme md5 (voir ici pour une explication des différentes méthodes d'authentification).

15voto

Hooman Points 11103

Mieux que confiance totale est simplement de le définir sur md5.

 # "local" is for Unix domain socket connections only
local   all         all                           md5
 

6voto

vish Points 1016

J'ai corrigé cela en modifiant le bas de /etc/postgres/9.1/main/pg_hba.conf pour qu'il soit (changer md5 en confiance; NOTE: cela signifie qu'il n'y aura pas de mot de passe de base de données, ce qui pourrait ne pas être ce que vous voulez).

 # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
# IPv6 local connections:
host    all         all         ::1/128               trust
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X