OperationalError at /admin/
FATAL: Peer authentication failed for user "myuser"
C'est l'erreur que je reçois lorsque j'essaye d'accéder à mon site d'administration Django. J'avais utilisé la base de données MySQL sans problème. Je suis nouveau dans PostgreSQL, mais j'ai décidé de changer parce que l'hôte que je prévois finalement d'utiliser pour ce projet n'a pas MySQL.
Par conséquent, j'ai pensé que je pourrais passer par le processus d'installation de PostgreSQL, exécuter un syncdb
et être prêt.
Le problème est que je n'arrive pas à faire en sorte que mon application se connecte à 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ée. Mais pas dans le script.
En outre, je peux utiliser manage.py shell
pour accéder à la base de données très bien.
Des pensées?
la source
config/database.yml
- c'est-à-dire dans ce fichier, j'avais besoin d'ajouter la lignehost: localhost
(ou où que vous soyez sur le serveur postgres - le mien était local)pg_hba.conf
est configuré pour empêcher les utilisateurs ordinaires de se connecter via des sockets UNIX mais les autorise via TCP / IP à partir de l'hôte local.local_settings.py
fichier et le# Set to empty string for localhost. Not used with sqlite3.
est dans leur. MENSONGE !!!C'est probablement parce que votre script s'exécute sous un autre utilisateur que celui avec lequel vous essayez de vous connecter ( myuser ici). Dans ce cas, l'authentification du pair échouera. Votre solution
HOST: "localhost"
fonctionne car vous n'utilisez plus l'authentification par les pairs. Cependant, il est plus lent queHOST: ""
parce qu'au lieu d'utiliser des sockets Unix, vous utilisez des connexions TCP. À partir de django docs :Si vous souhaitez continuer à utiliser les sockets, des paramètres corrects
pg_hba.conf
sont nécessaires. Le plus simple est:tout en commentant toutes les autres
local
lignes de la configuration. Notez que le rechargement de postgres est nécessaire pour que cette modification prenne effet.Mais si une machine de production multi-utilisateur est en question, vous voudrez peut-être utiliser quelque chose de plus sécurisé comme
md5
(voir ici pour une explication des différentes méthodes d'authentification).la source
Mieux que faire entièrement confiance, il suffit de le définir sur md5.
la source
J'ai corrigé cela en modifiant le bas de /etc/postgres/9.1/main/pg_hba.conf pour être (en changeant md5 en confiance; REMARQUE cela signifie qu'il n'y aura pas de mot de passe de base de données, ce qui peut ne pas être ce que vous voulez)
la source
Je suis juste tombé sur le même problème mais je voulais utiliser des sockets Unix comme l'a dit Clime, mais en utilisant toujours la
peer
méthode. J'ai mappé mon nom d'utilisateur système avec le nom d'utilisateur postgres dans lepg_hba.conf
, qui fonctionne avec lapeer
méthode.À l'intérieur,
pg_hba.conf
j'ai ajouté:À l'intérieur,
pg_ident.conf
j'ai ajouté:la source