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?
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
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.
- 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
- Reinicie el servidor
sudo service postgresql restart
- Inicie sesión en psql y establezca su contraseña
Psql-U postgres
ALTER USER postgres with password 'your-pass';
- 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í
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!
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
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
- 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
- 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
-
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.
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.4
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';
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.
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
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
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=#
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"
);
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.
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
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.
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!
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ó.
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á
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
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