OperationalError at /admin/
FATAL: Peer authentication failed for user "myuser"
Este es el error que recibo cuando intento acceder a mi sitio de administración de Django. Había estado usando la base de datos MySQL sin problema. Soy nuevo en PostgreSQL, pero decidí cambiar porque el host que finalmente planeo usar para este proyecto no tiene MySQL.
Por lo tanto, pensé que podría pasar por el proceso de instalación de PostgreSQL, ejecutar un syncdb
y estar listo.
El problema es que parece que no puedo hacer que mi aplicación se conecte a la base de datos. Puedo iniciar sesión en PostgreSQL a través de la línea de comandos o la aplicación de escritorio que descargué. Simplemente no en el guión.
Además, puedo usar manage.py shell
para acceder a la base de datos sin problemas.
¿Alguna idea?
fuente
config/database.yml
, es decir, en ese archivo necesitaba agregar la líneahost: localhost
(o donde sea que esté su servidor de postgres, el mío era local)pg_hba.conf
está configurado para impedir que los usuarios normales se conecten a través de sockets UNIX, pero les permite a través de TCP / IP desde localhost.local_settings.py
archivo y# Set to empty string for localhost. Not used with sqlite3.
está en su. ¡¡¡MENTIRAS!!!Probablemente se deba a que su script se está ejecutando bajo otro usuario distinto al que está intentando conectarse ( myuser aquí). En este caso, la autenticación de pares fallará. Su solución con
HOST: "localhost"
funciona porque ya no está usando la autenticación de pares. Sin embargo, es más lentoHOST: ""
porque en lugar de usar sockets Unix, usa conexiones TCP. De django docs :Si desea seguir usando sockets,
pg_hba.conf
se necesitan los ajustes correctos en . El mas simple es:mientras comentaba todos los demás
local
líneas en la configuración. Tenga en cuenta que es necesario volver a cargar postgres para que este cambio surta efecto.Pero si la máquina de producción multiusuario está en cuestión, es posible que desee utilizar algo más seguro como
md5
(consulte aquí la explicación de varios métodos de autenticación).fuente
Mejor que confiar plenamente es simplemente configurarlo en md5.
fuente
Arreglé esto editando la parte inferior de /etc/postgres/9.1/main/pg_hba.conf para que sea (cambiando md5 a trust; NOTA esto significa que no habrá contraseña de base de datos, que puede que no sea lo que desea)
fuente
Me encontré con el mismo problema, pero quería usar sockets Unix como dijo clime, pero todavía usando el
peer
método. Mapeé mi nombre de usuario del sistema con el nombre de usuario de postgres dentro depg_hba.conf
, que está funcionando con elpeer
método.Dentro
pg_hba.conf
agregué:Dentro
pg_ident.conf
agregué:fuente