¿Cómo puedo hacer que pg_dump se autentique correctamente?

98

He intentado usar variable del sistema principal PGPASSWORDy .pgpassy ninguno de estos dos me permite autenticarse en la base de datos. He chmodobtenido .pgpasslos permisos adecuados y también he intentado:

export PGPASSWORD=mypass and PGPASSWORD=mypass

La contraseña SÍ contiene un \sin embargo, la estaba entre comillas simples PGPASS='mypass\'y aún no se autenticará.

Estoy corriendo:

pg_dump dbname -U username -Fc

y sigo recibiendo

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL:  Peer authentication failed for user "username"
Kosmonaut
fuente
1
Esa parte "... Autenticación de pares ..." del mensaje de error significa que no está utilizando la autenticación de contraseña en absoluto.
Milen A. Radev

Respuestas:

197

La Solución Rápida

El problema es que está intentando realizar una peerautenticación local basada en su nombre de usuario actual. Si desea utilizar una contraseña, debe especificar el nombre de host con -h.

pg_dump dbname -U username -h localhost -F c

Explicación

Esto se debe a lo siguiente en su pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

Esto le dice a Postgres que use peer autenticación para usuarios locales, lo que requiere que el nombre de usuario de postgres coincida con el nombre de usuario actual del sistema. La segunda línea se refiere a las conexiones que utilizan un nombre de host y le permitirá autenticarse con una contraseña a través del md5método.

Mi configuración de desarrollo preferida

NOTA : Esto solo debe usarse en estaciones de trabajo de un solo usuario. Esto podría provocar una vulnerabilidad de seguridad importante en una máquina de producción o multiusuario.

Al desarrollar contra una instancia de postgres local, me gusta cambiar mi método de autenticación local a trust. Esto permitirá conectarse a Postgres a través de un socket Unix local como cualquier usuario sin contraseña. Se puede hacer simplemente cambiando peerarriba trusty volviendo a cargar postgres.

# Don't require a password for local connections
local   all             all                                     trust
Jim Mitchener
fuente
6
Para cualquiera que no esté seguro de dónde está su archivo conf: use sudo locate pg_hba.conf- tiene que ser sudo ya que el usuario de postgres será el único con acceso al directorio (creo).
jcollum
su comando funcionó para mí pero no puedo averiguar dónde está, o cuál es el nombre del archivo, ¿cómo puedo encontrar ese archivo?
Sobhan
-1

A veces puedes usar

sudo -u postgres pg_dump ...
Roland Pihlakas
fuente