cuando creo un nuevo usuario, pero no puede iniciar sesión en la base de datos.
Lo hago así:
postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
luego cree una base de datos:
postgres@Aspire:/home/XXX$ createdb -O dev test_development
después de eso, intento psql -U dev -W test_development
iniciar sesión, pero aparece el error:
psql: FATAL: Peer authentication failed for user "dev"
Traté de resolver el problema pero fallé.
postgresql
hsming
fuente
fuente
--interactive
al comando:createuser --interactive joe
Respuestas:
Tratar:
dónde
-U
es el nombre de usuario de la base de datos-h
es el nombre de host / IP del servidor local, evitando así los sockets de dominio Unix-d
es el nombre de la base de datos para conectarseLuego, Postgresql evalúa esto como una conexión de "red" en lugar de una conexión de socket de dominio Unix, por lo que no se evalúa como una conexión "local" como puede ver en
pg_hba.conf
:fuente
psql [option...] [dbname [username]]
, por lo que se podría pensarpsql dbname username
lo haría solo trabajo ..\c glossary john
FATAL: Peer authentication failed for user "john"
luego\c glossary john localhost
Password for user john:
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
You are now connected to database "glossary" as user "john" on host "localhost" at port "5432".
funcionó.Su conexión falló porque de manera predeterminada se
psql
conecta a través de sockets UNIX mediantepeer
autenticación, que requiere que el usuario actual de UNIX tenga el mismo nombre de usuario quepsql
. Por lo tanto, tendrá que crear el usuario UNIXdev
y luego iniciar sesión comodev
o usarlosudo -u dev psql test_development
para acceder a la base de datos (y nopsql
debe solicitar una contraseña).Si no puede o no desea crear el usuario UNIX, como si solo desea conectarse a su base de datos para consultas ad hoc , forzar una conexión de socket usando
psql --host=localhost --dbname=test_development --username=dev
(como lo señala la respuesta de @meyerson) resolverá su problema inmediato.Pero si tiene la intención de forzar la autenticación de contraseña a través de sockets Unix en lugar del método de pares, intente cambiar la siguiente
pg_hba.conf
línea *:de
a
peer
significa que confiará en la identidad (autenticidad) del usuario de UNIX. Así que no solicito una contraseña.md5
significa que siempre pedirá una contraseña y la validará después de analizarMD5
.Por supuesto, también puede crear reglas más específicas para una base de datos o usuario específico, con algunos usuarios que tienen
peer
y otros que requieren contraseñas.Después de cambiar
pg_hba.conf
si PostgreSQL se está ejecutando, deberá volver a leer la configuración volviendo a cargar (pg_ctl reload
) o reiniciando (sudo service postgresql restart
).* El archivo
pg_hba.conf
probablemente estará en/etc/postgresql/9.x/main/pg_hba.conf
Editado: Comentarios de @Chloe, @JavierEH, @Jonas Eicher, @fccoelho, @Joanis, @Uphill_What comentarios incorporados en la respuesta.
fuente
peer
ANDmd5
? Cuando configuromd5
, ¡ya no puedo iniciar sesión con elpostgres
usuario! Intenté agregar varias líneas y separar el método con comas, pero no funcionaron. Ok, encontrémgoldwasser
la respuesta y funcionó. ¡Acabo de agregar otra línea para el usuariopostgres
con el métodopeer
!/var/lib/pgsql/9.4/data/pg_hba.conf
La autenticación por pares significa que postgres le pide al sistema operativo su nombre de inicio de sesión y lo utiliza para la autenticación. Para iniciar sesión como usuario "dev" con autenticación de pares en postgres, también debe ser el usuario "dev" en el sistema operativo.
Puede encontrar detalles de los métodos de autenticación en la documentación de Postgresql .
Sugerencia: Si ya no funciona ningún método de autenticación, desconecte el servidor de la red y use el método "confianza" para "localhost" (y verifique que no se pueda acceder a su servidor a través de la red mientras el método "confianza" está habilitado).
fuente
dev
usuario del sistemaXXX
Cuando especificas:
se conecta a través de UNIX Socket, que por defecto usa
peer
autenticación, a menos que se especifique lopg_hba.conf
contrario.Puedes especificar:
para obtener la conexión TCP / IP en la interfaz de bucle invertido (tanto IPv4 como IPv6) para el especificado
database
yuser
.Después de los cambios, debe reiniciar postgres o volver a cargar su configuración. Reinicie que debería funcionar en las distribuciones modernas basadas en RHEL / Debian:
La recarga debería funcionar de la siguiente manera:
pero el comando puede diferir según la configuración de la RUTA; es posible que deba especificar la ruta absoluta, que puede ser diferente, dependiendo de la forma en que se instaló el postgres.
Entonces puedes usar:
para iniciar sesión con eso
user
a lo especificado adatabase
través de TCP / IP.md5
significa contraseña cifrada, mientras que también puede especificarpassword
contraseñas de texto sin formato durante la autorización. Estas 2 opciones no deberían ser de gran importancia siempre que el servidor de la base de datos solo sea accesible localmente, sin acceso a la red.Nota importante: el orden de definición en
pg_hba.conf
cuestión: las reglas se leen de arriba a abajo, como iptables, por lo que probablemente desee agregar las reglas propuestas por encima de la regla:fuente
Si bien la respuesta de @ flaviodesousa funcionaría, también obliga a todos los usuarios (todos los demás) a ingresar una contraseña.
En algún momento tiene sentido mantener la autenticación de pares para todos los demás, pero hacer una excepción para un usuario del servicio. En ese caso, desearía agregar una línea a pg_hba.conf que se vea así:
Recomiendo que agregue esta línea justo debajo de la línea de encabezado comentada:
Deberá reiniciar PostgreSQL utilizando
Si está utilizando 9.3, su pg_hba.conf probablemente sea:
fuente
Esto funciona para mí cuando me encuentro con él:
fuente
dev
.La solución más fácil:
fuente
Simplemente tuve que agregar
-h localhost
fuente
En mi caso estaba usando un puerto diferente. El valor predeterminado es 5432. Estaba usando 5433. Esto funcionó para mí:
fuente
Para las personas en el futuro que vean esto,
postgres
está en/usr/lib/postgresql/10/bin
mi servidor Ubuntu.Lo agregué a la RUTA en mi archivo .bashrc y agregué esta línea al final
luego en la línea de comando
Actualicé mi ambiente bash. Ahora puedo usar
postgres -D /wherever
desde cualquier directoriofuente
pg_dump -h localhost -U postgres -F c -b -v -f mydb.backup mydb
fuente
-U postgres
ser fundamental? ¿Qué son todas esas letras de guión , de todos modos?Tratar:
psql -U nombre_función -d base de datos -h nombre de host..com -W
fuente