Error de autentificación Peer en Psql
De manera predeterminada PostgreSQL en GNU/Linux Debian, deja habilitado el mecanismo de autentificación PEER para conexiones locales, por lo tanto si intenta conectarse desde la sesión de un usuario del sistema operativo, que no es usuario de base de datos, obtendrá un error de autentificación. (psql: FATAL: la autentificación Peer falló para el usuario «postgres»), porque psql está obteniendo el nombre del usuario desde el propio Kernel para luego usarlo con nombre de usuario de base de datos al momento de intentar la autentificación.Primer forma de arreglarlo
La primer solución no requiere cambiar nada. Solo consiste en utilizar la autentificación correctamente, iniciando sesión con postgres a nivel de sistema operativo y luego intentar autenticarse en psql.
usuario@laptop:~$ su postgres
Contraseña:
usuario@laptop:/home/usuario$ psql -d mi_basedatos
psql (9.4.0)
Digite «help» para obtener ayuda.
mi_basedatos=#
La segunda forma de arreglarlo
La otra posibilidad es cambiar la configuración de autentificación, cambiándola de PEER a MD5, en el archivo de configuración de PostgreSQL.Es muy recomendable hacer una copia del archivo de configuración antes de modificarlo, para hacer la copia introduzca el siguiente comando:
$ sudo cp /etc/postgresql/9.4/main/pg_hba.conf /etc/postgresql/9.4/main/pg_hba.conf_bk
Con el siguiente comando se hace la modificación automáticamente, pero tiene que copiar y pegar el comando con todos los espacios en blanco, tal y cómo está a continuación:
$ sed -i -e 's/local all postgres peer/local all postgres md5/g' /etc/postgresql/9.4/main/pg_hba.conf
Para comprobar que el cambio se aplicó correctamente introduzca el siguiente comando:
$ sudo diff /etc/postgresql/9.4/main/pg_hba.conf /etc/postgresql/9.4/main/pg_hba.conf_bk
85c85
< local all postgres md5
---
> local all postgres peer
Si el cambio no se hizo correctamente debe editar el archivo manualmente cambiando "peer" por "md5" en la linea que contiene el siguiente texto:
# Database administrative login by Unix domain socket
local all postgres peer
Debería quedar así:
# Database administrative login by Unix domain socket
local all postgres md5
Para editar el archivo introduzca el siguiente comando:
$ sudo gedit /etc/postgresql/9.4/main/pg_hba.conf
Finalmente, ya sea que haya hecho el cambio automáticamente o editando el archivo de configuración manualmente, deberá reiniciar el servicio de postgres para que los cambios surtan efectos, para hacerlo introduzca el siguiente comando:
$ sudo /etc/init.d/postgresql restart
[sudo] password for usuario:
[ ok ] Restarting postgresql (via systemctl): postgresql.service.
Ahora si podrá autentificarse en psql aunque el usuario del sistema operativo no sea usuario de base de datos. Tome en cuenta que siempre deberá indicar el usuario con el que intentará iniciar sesión, con el parámetro -U
usuario@laptop:~$ psql -U postgres -d mi_basedatos
Contraseña para usuario postgres:
psql (9.4.0)
Digite «help» para obtener ayuda.
mi_basedatos=#

