Autenticación del Cliente

From PostgreSQL wiki
Jump to navigationJump to search


Los usuarios permitidos para el establecimiento de la conexión a la base de datos son controlados por un archivo sencillo en el directorio raíz de su base de datos, llamado pg_hba.conf. En cuanto corre initdb para la creación del clúster de la base de datos, es creado un fichero pg_hba.conf con los valores por omisión.

Los permisos que existen por omisión dependen de cómo fue invocado initdb. Por omisión, los nuevos clústers son creados con el tipo trust con el cual, cualquier usuario local puede conectarse a la base de datos. Sin embargo, algunos empaquetadores de PostgreSQL pueden cambiar esto. Por ejemplo, si usa 'service initdb' en Red Hat para crear el clúster, éste llama a initdb de la siguiente manera:

initdb --pgdata='$PGDATA' --auth= 'ident sameuser'

El cual usa el no particularmente popular método ident para averiguar si un usuario está permitido conectarse, lo cual suele ser frustrante para quienes no son conscientes de ello.

Una instalación típica recomendada para el acceso desde la red de la base de datos toma la dirección local LAN y sólo permite los clientes que se autentiquen usando una contraseña encriptada a través de MD5. La siguiente entrada en en el pg_hba.conf ilustrará algo como esto:

# TIPO BASE_DE_DATOS USUARIO CIDR-DIRECCIÓN   MÉTODO
host    all          all     192.168.1.0/24   md5

Esto sólo permite conectarse a los clientes con las direcciones IP de la red 192.168.1.0 -- 192.168.1.255 y sólo si proveen la contraseña correcta para el usuario. Observe que un acceso de la red como éste puede establecerse sólo si está permitido en el parámetro listen_addresses de postgresql.conf.

Las contraseñas de los usuarios de la base de datos son aplicadas cuando se crea el usuario con CREATE ROLE y pueden ser modificadas con la orden ALTER ROLE. createuser puede ser una herramienta muy útil para ayudar en este sentido.

Hay una pequeña trampa aquí: puesto que para la creación de un nuevo rol se requiere que la conexión a la base de datos sea como un superusario, ¿cómo se pueden empezar a crear usuarios? Un enfoque común es comenzar con un pg_hba.conf que confía sólo a los usuarios que se conectan localmente:

# Sólo conexiones locales para el socket de Unix
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust

Si la base de datos está configurada de esta forma, cualquiera logueado en el sistema puede ahora conectarse al servidor a su voluntad, así que no desea conservar esta configuración por mucho tiempo. Lo que puede hacer ahora es usar la orden ALTER ROLE para asignar una contraseña fuerte al superusuario postgres. Una vez que lo haya hecho, puede detener el servicio (pg_ctl stop), cambiar todos los "trust" por "md5", agregar su rango o bloque de red completo a pg_hba.conf, y cambiar el parámetro listen_address de postgresql.conf. Cuando lo inicie nuevamente, ya tendrá una cuenta de superusuario de la cual conoce la contraseña, con la cual puede crear las cuentas para sus usuarios regulares.

Ejemplos

Ejemplo 1

Acceso por tcp/ip (red) a la base de datos test001, como usuario test desde el ordenador con IP 10.0.0.100, y método de autentificación md5:

host    test001   test  10.0.0.100 255.255.255.255   md5

Esta misma entrada se podría escribir también con la máscara de red en notación CIDR:

host    test001   test  10.0.0.100/32  md5

Ejemplo 2

Acceso por tcp/ip (red) a la base de datos test001, como usuario test desde todos los ordenadores de la red 10.0.0.0, con mascara de red 255.255.255.0 (254 ordenadores en total) y método de autentificación md5:

host    test001   test  10.0.0.0 255.255.255.0   md5

Esta misma entrada se podría escribir también con la mascara de red en notación CIDR:

host    test001   test  10.0.0.0/24  md5

Ejemplo 3

Acceso por tcp/ip (red), encríptado, a todas las bases de datos de nuestro cluster, como usuario test desde el ordenador con IP 10.0.0.100, y el ordenador 10.1.1.100 y método de autentificación md5 (necesitamos dos entradas en nuestro fichero pg_hba.conf):

hostssl    all   test  10.0.0.100 255.255.255.255   md5
hostssl    all   test  10.1.1.100 255.255.255.255   md5

Ejemplo 4

Denegar el acceso a todos las bases de datos de nuestro cluster al usuario test, desde todos los ordenadores de la red 10.0.0.0/24 y dar acceso al resto del mundo con el método md5:

host       all   test  10.0.0.0/24   reject
host       all   all  0.0.0.0/0     md5

Autenticación LDAP

Postgresql nos permite comprobar los usuarios contra un sistema LDAP, aunque si bien esto es posible, hay que tener en cuenta que el usuario igualmente debe existir en la base datos.

Parámetros que hay que considerar al realizar una petición de autenticación a un servidor de LDAP:

Parámetros 	Descripción
ldapserver 	IP o dominio del servidor ldap a conectarse.
ldapprefix 	El nombre de usuario.
ldapsuffix 	El sufijo que continua al nombre de usuario, que concluiría para formar el “dn”.
ldapport 	Puerto al que se va a conectar al servidor ldap, en caso de no ser especificado se utiliza el
puerto por default, 389.
ldaptls 	Debe setearse en 1 si se quiere que la petición de autenticación hacia el servidor ldap se
realize utilizando encriptación TLS.

Ejemplo del uso de la autenticación LDAP:

host all all 127.0.0.1/24 ldap ldapserver="localhost" ldapprefix="uid=" ldapsuffix=",dn=testing-et,dc=com,dc=cu"

Artículos relacionados