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_developmentiniciar 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

--interactiveal comando:createuser --interactive joeRespuestas:
Tratar:
dónde
-Ues el nombre de usuario de la base de datos-hes el nombre de host / IP del servidor local, evitando así los sockets de dominio Unix-des 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 usernamelo haría solo trabajo ..\c glossary johnFATAL: Peer authentication failed for user "john"luego\c glossary john localhostPassword 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
psqlconecta a través de sockets UNIX mediantepeerautenticación, que requiere que el usuario actual de UNIX tenga el mismo nombre de usuario quepsql. Por lo tanto, tendrá que crear el usuario UNIXdevy luego iniciar sesión comodevo usarlosudo -u dev psql test_developmentpara acceder a la base de datos (y nopsqldebe 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.conflínea *:de
a
peersignifica que confiará en la identidad (autenticidad) del usuario de UNIX. Así que no solicito una contraseña.md5significa 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
peery otros que requieren contraseñas.Después de cambiar
pg_hba.confsi 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.confprobablemente estará en/etc/postgresql/9.x/main/pg_hba.confEditado: Comentarios de @Chloe, @JavierEH, @Jonas Eicher, @fccoelho, @Joanis, @Uphill_What comentarios incorporados en la respuesta.
fuente
peerANDmd5? Cuando configuromd5, ¡ya no puedo iniciar sesión con elpostgresusuario! Intenté agregar varias líneas y separar el método con comas, pero no funcionaron. Ok, encontrémgoldwasserla respuesta y funcionó. ¡Acabo de agregar otra línea para el usuariopostgrescon el métodopeer!/var/lib/pgsql/9.4/data/pg_hba.confLa 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
devusuario del sistemaXXXCuando especificas:
se conecta a través de UNIX Socket, que por defecto usa
peerautenticación, a menos que se especifique lopg_hba.confcontrario.Puedes especificar:
para obtener la conexión TCP / IP en la interfaz de bucle invertido (tanto IPv4 como IPv6) para el especificado
databaseyuser.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
usera lo especificado adatabasetravés de TCP / IP.md5significa contraseña cifrada, mientras que también puede especificarpasswordcontraseñ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.confcuestió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 localhostfuente
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,
postgresestá en/usr/lib/postgresql/10/binmi 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 /whereverdesde cualquier directoriofuente
pg_dump -h localhost -U postgres -F c -b -v -f mydb.backup mydb
fuente
-U postgresser 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