Error de obtención: Falló la autenticación de pares para el usuario "postgres", al intentar que pgsql funcione con rails


Estoy recibiendo

FATAL: Peer authentication failed for user "postgres"

Cuando intento hacer que postgres funcione con Rails.

Aquí está mi pg_hba.conf, mi database.yml, y un volcado completo de la traza.

Cambié la autenticación a md5 en pg_hba y probé cosas diferentes, pero ninguna parece funcionar.

También intenté crear un nuevo usuario y base de datos según Rails 3.2, FATAL: La autenticación de pares falló para el usuario (PG::Error)

Pero no aparecen en pgadmin o incluso cuando corro sudo -u postgres psql -l

¿Alguna idea de dónde me estoy equivocando?

Author: Nathan Smith, 2013-09-06

18 answers

El problema sigue siendo su archivo pg_hba.conf (/etc/postgresql/9.1/main/pg_hba.conf*). Esta línea:

local   all             postgres                                peer

Debe ser

local   all             postgres                                md5

* Si no puede encontrar este archivo, ejecutar locate pg_hba.conf debería mostrarle dónde está el archivo.

Después de alterar este archivo, no olvide reiniciar su servidor PostgreSQL. Si estás en Linux, eso sería sudo service postgresql restart.

Estas son breves descripciones de ambas opciones de acuerdo con los documentos oficiales de PostgreSQL sobre autenticación métodos.

Autenticación de pares

El método de autenticación por pares funciona obteniendo el nombre de usuario del sistema operativo desde el kernel y usándolo como el nombre de usuario de la base de datos (con asignación opcional de nombres de usuario). Este método es solo se admite en conexiones locales.

Autenticación con contraseña

Los métodos de autenticación basados en contraseña son md5 y password. Estos métodos operan de manera similar, excepto por la forma que se envía la contraseña a través de la conexión, es decir MD5-hash y clear-text respectivamente.

Si está preocupado por los ataques de "rastreo" de contraseñas, entonces md5 se prefiere. La contraseña simple siempre debe evitarse si es posible. Sin embargo, md5 no se puede usar con la característica db_user_namespace. Si el la conexión está protegida por encriptación SSL, luego se puede usar una contraseña de forma segura (aunque la autenticación con certificado SSL podría ser una mejor opción si uno depende de usando SSL).

Ubicación de la muestra para pg_hba.conf

/etc/postgresql/9.1/main/pg_hba.conf

 732
Author: depa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-06 03:31:06

Después de instalar Postgresql hice los siguientes pasos.

  1. abra el archivo pg_hba.conf para Ubuntu que estará en /etc/postgresql/9.x/main y cambie esta línea:
local   all             postgres                                peer

A

local   all             postgres                                trust
  1. Reinicie el servidor
sudo service postgresql restart
  1. Inicie sesión en psql y establezca su contraseña

Psql-U postgres

ALTER USER postgres with password 'your-pass';
  1. Finalmente cambiar el pg_hba.conf de
local   all             postgres                                trust

A

local   all             postgres                                md5

Después de reiniciar postgresql servidor, puede acceder a él con su propia contraseña

Detalles de los métodos de autenticación:

Confianza: cualquier persona que pueda conectarse al servidor está autorizada a acceder a la base de datos

Peer - use el nombre de usuario del sistema operativo del cliente como nombre de usuario de la base de datos para acceder a él.

Md5-contraseña-autenticación base

Para más información marque aquí

 245
Author: Arivarasan L,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-05 13:34:54

Si se conecta a través de localhost (127.0.0.1) no debería experimentar ese problema en particular. No arruinaría mucho con el pg_hba.conf pero en su lugar ajustaría su cadena de conexión:

psql -U someuser -h 127.0.0.1 database

Donde someuser es tu usuario como el que te estás conectando y database es la base de datos a la que tu usuario tiene permiso para conectarse.

Esto es lo que hago en Debian para configurar postgres:

http://www.postgresql.org/download/linux/debian/  (Wheezy 7.x)

as root …

    root@www0:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list

    root@www0:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

    root@www0:~# apt-get update

    root@www0:~# apt-get install postgresql-9.4        

    root@www0:~# su - postgres 

    postgres@www0:~$ createuser --interactive -P someuser
    Enter password for new role:
    Enter it again:
    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) n

    postgres@www0:~$ createdb -O someuser database

    postgres@www0:~$ psql -U someuser -h 127.0.0.1 database

Disfrute!

 131
Author: StylusEater,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-01 10:41:02

Esto ha funcionado para mí !!

sudo -u postgres psql
 18
Author: iamuser2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-10 07:39:13
  1. Vaya a este /etc/postgresql/9.x / main / y open pg_hba.conf file

En mi caso:

$>  sudo nano /etc/postgresql/9.3/main/pg_hba.conf
  1. Sustitúyase peer por md5

Así que esto se cambiará a:

Inicio de sesión administrativo de base de datos por socket de dominio Unix local todos los postgres peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5

Esto:

Inicio de sesión administrativo de base de datos por socket de dominio Unix local todos los postgres md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
  1. Luego reinicie el servidor pg:

    Restart> sudo service postgresql restart

A continuación se muestra la lista de MÉTODOS utilizados para conectarse con postgres:

# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
# "krb5", "ident", "peer", "pam", "ldap", "radius" or "cert".  Note that
# "password" sends passwords in clear text; "md5" is preferred since
# it sends encrypted passwords.

Nota: Si aún no has creado tu usuario postgres. Cree eso y ahora puede acceder al servidor postgres usando las credenciales de usuario.

 14
Author: Taimoor Changaiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-10 11:29:37

Si tiene un problema, debe localizar su pg_hba.conf. El comando es:

find / -name 'pg_hba.conf' 2>/dev/null

Y después de eso cambie el archivo de configuración:

Postgresql 9.3

Postgresql 9.3

Postgresql 9.4

Postgresql 9.3

El siguiente paso es: Reiniciar la instancia de base de datos:

service postgresql-9.3 restart

Si tiene algún problema, debe volver a configurar la contraseña:

ALTER USER db_user with password 'db_password';

 13
Author: d.danailov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-22 07:48:40

Yo tenía el mismo problema.

La solución de depa es absolutamente correcta.

Solo asegúrese de que u tiene un usuario configurado para usar PostgreSQL.

Compruebe el archivo:

$ ls /etc/postgresql/9.1/main/pg_hba.conf -l

El permiso de este archivo debe ser dado al usuario con el que ha registrado su psql.

Además. Si eres bueno hasta ahora..

Actualizar según las instrucciones de @depa.

Es decir,

$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf

Y luego hacer cambios.

 10
Author: nirvanastack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-14 02:25:57

Las ediciones anteriores funcionaron para mí, después de que me di cuenta de que necesitaba reiniciar el servidor postgres después de hacerlas. Para ubuntu:

sudo /etc/init.d/postgresql restart
 6
Author: sibosop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-25 21:42:51

Si desea mantener la configuración predeterminada pero desea autenticación md5 con conexión de socket para una conexión específica de usuario/base de datos, agregue una línea" local "ANTES de la línea" local all/all":

# TYPE  DATABASE     USER         ADDRESS             METHOD

# "local" is for Unix domain socket connections only
local   username     dbname                           md5  # <-- this line
local   all          all                              peer
# IPv4 local connections:
host    all          all          127.0.0.1/32        ident
# IPv6 local connections:
host    all          all          ::1/128             ident
 6
Author: Åsmund,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-10 12:11:15

Estaba moviendo el directorio de datos en un servidor clonado y tenía problemas para iniciar sesión como postgres. Restablecer la contraseña de postgres así funcionó para mí.

root# su postgres postgres$ psql -U postgres psql (9.3.6) Type "help" for help. postgres=#\password Enter new password: Enter it again: postgres=#

 6
Author: Luca Marletta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-27 14:43:04

Use host=localhost en conexión.

PGconn *conn = PQconnectdb(
    "host=localhost user=postgres dbname=postgres password=123"
);
 6
Author: Manisha Vasani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-15 17:57:11

Cambiando EL MÉTODO peera trust en pg_hba.conf (/etc/postgresql/9.1/main / pg_hba.conf / línea 85) resuelve el problema. Agregar md5 pide una contraseña, por lo tanto, si hay un requisito para evitar el uso de contraseñas, use trust en lugar de md5.

 5
Author: Supun Muthutantrige,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-03 05:40:44

El siguiente comando funciona para mí:

psql -d myDb -U username -W
 4
Author: Mazen Ora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-16 10:27:10

Solo necesita establecer el MÉTODO para confiar.

#TYPE  DATABASE        USER            ADDRESS                 METHOD
local    all             all                                     trust

Y recargar el servidor postgres.

# service postgresql-9.5 reload

Cambios en pg_hba.conf no requiere REINICIAR el servidor postgres. sólo RECARGA.

 3
Author: Alexandr Zaichenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-14 13:11:02

Muchas de las otras respuestas pertenecen a la configuración de los diversos archivos de configuración, y las pertenecientes a la pg_hba.conf se aplican y son 100% correctas. Sin embargo, asegúrese de que está modificando los archivos de configuración correctos.

Como otros han mencionado, las ubicaciones de los archivos de configuración se pueden sobrescribir con varias configuraciones dentro del archivo de configuración principal, así como proporcionar una ruta al archivo de configuración principal en la línea de comandos con la opción -D.

Puede utilizar lo siguiente comando mientras está en una sesión psql para mostrar dónde se están leyendo sus archivos de configuración (asumiendo que puede iniciar psql). Este es solo un paso de solución de problemas que puede ayudar a algunas personas:

select * from pg_settings where setting~'pgsql';  

También debe asegurarse de que el directorio personal de su usuario de postgres esté donde espera que esté. Digo esto porque es bastante fácil pasar por alto esto debido al hecho de que su mensaje mostrará '~' en lugar de la ruta real de su directorio personal, por lo que no es tan obvio. Muchos por defecto, el directorio personal de postgres user es /var/lib/pgsql.

Si no está establecido en lo que se supone que debe ser, detenga el servicio postgresql y use el siguiente comando mientras esté conectado como root. También asegúrese de que el usuario de postgres no esté conectado a otra sesión:

usermod -d /path/pgsql postgres

Finalmente, asegúrese de que su variable PGDATA esté configurada correctamente escribiendo echo $PGDATA, lo que debería generar algo similar a:

/path/pgsql/data

Si no está establecido, o muestra algo diferente de lo que espere que sea, examine su inicio o archivos RC como .perfil o.bash.rc - esto variará mucho dependiendo de su sistema operativo y su shell. Una vez que haya determinado el script de inicio correcto para su máquina, puede insertar lo siguiente:

export PGDATA=/path/pgsql/data

Para mi sistema, coloqué esto en /etc/profile.d/profile.local.sh para que fuera accesible para todos los usuarios.

Ahora debería poder iniciar la base de datos como de costumbre y toda la configuración de la ruta de psql debería ser correcta!

 3
Author: Bill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-20 20:34:51

Mi problema fue que no escribí ningún servidor. Pensé que era un valor predeterminado debido al marcador de posición, pero cuando escribí localhost funcionó.

 2
Author: Epsilon47,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-12 12:25:53

Si está intentando localizar este archivo en Cloud 9, puede hacer

sudo vim /var/lib/pgsql9/data/pg_hba.conf

Presione I para editar/insertar, presione ESC 3 veces y escriba :wq guardará el archivo y saldrá

 2
Author: Marshall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-29 19:17:04

Si se enfrenta a este problema con rails y sabe que ya ha creado ese nombre de usuario con contraseña junto con los derechos correctos, solo tiene que poner lo siguiente al final de su base de datos.archivo yml.

host: localhost

El archivo general se verá como abajo

development:
  adapter: postgresql
  encoding: unicode
  database: myapp_development
  pool: 5
  username: root
  password: admin
  host: localhost

No necesita tocar su archivo pg_hba.conf en absoluto. Feliz codificación

 1
Author: ImranNaqvi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-04 19:11:54