2012-05-03 13 views
72

He intentado utilizar la variable de host PGPASSWORD y .pgpass y ninguno de estos dos me permitirá autenticarme en la base de datos. He chmod 'd .pgpass a los permisos apropiados y también trató:¿Cómo puedo obtener pg_dump para autenticarse correctamente?

export PGPASSWORD=mypass and PGPASSWORD=mypass 

La contraseña contiene una \ sin embargo me encierra entre comillas simples PGPASS='mypass\' y todavía no autenticará.

estoy corriendo:

pg_dump dbname -U username -Fc 

y todavía recibo

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL: Peer authentication failed for user "username" 
+1

que "... la autenticación entre pares ..." parte del mensaje de error significa que no está utilizando [autenticación de contraseña] (http://www.postgresql.org/docs/current/static/auth- methods.html # AUTH-PEER) en absoluto. –

Respuesta

149

La Solución rápida

El problema es que está tratando de llevar a cabo la autenticación local peer en función de 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 utilizar peer autenticación para los usuarios locales que requiere la postgres nombre de usuario para que coincida con su sistema actual nombre de usuario La segunda línea se refiere a las conexiones que usan un nombre de host y le permitirán autenticarse con una contraseña a través del método md5.

Mi configuración preferida Config

NOTA: Esto sólo se debe utilizar en estaciones de trabajo de usuario único. Esto podría conducir a una gran vulnerabilidad de seguridad en una máquina de producción o multiusuario.

Al desarrollar en una instancia de postgres local me gusta cambiar mi método de autenticación local a trust. Esto permitirá la conexión a postgres a través de un socket de Unix local como cualquier usuario sin contraseña. Se puede hacer simplemente cambiando peer arriba a trust y recargando postgres.

# Don't require a password for local connections 
local all    all          trust 
+2

Ayudó. gracias – StarWars

+3

Para alguien 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

Cuestiones relacionadas