Buenas tardes amigos de la lista, Actualmente en nuestra compañia estamos configurando un sistema de alta disponibilidad de PostgreSQL (cluster de lectura) usando pgpool + file-based log shipping (replicación de datos con archivos WAL), pero hemos tenido problemas con la autenticación de usuarios mediante PgPool usando MD5.
El problema con la autenticación es que pgpool solo valida que el usuario exista en el archivo "pool_passwd" pero nunca verifica la contraseña, permitiendo conexiones de un usuario valido usando cualquier contraseña, cuando lo esperado es que use la contraseña que se creó usando "pg_md5" y se almaceno en el archivo "pool_passwd". A continuación les proporciono información detallada de nuestra configuración: 1. Estamos usando los siguientes paquetes de software sobre una distribución amazon Linux AMI (basado en Redhat EL 6): - pgpool-II-91-3.1.3-2.rhel6.x86_64 - postgresql91-libs-9.1.9-1PGDG.rhel6.x86_64 - postgresql91-9.1.9-1PGDG.rhel6.x86_64 - postgresql91-server-9.1.9-1PGDG.rhel6.x86_64 - Más información de la distribución de GNU/Linux que utilizamos en https://aws.amazon.com/amazon-linux-ami/2013.03-release-notes/ 2. Usamos como base para la configuración el archivo de ejemplo "pgpool.conf.sample-stream" incluido en la instalación de pgpool bajo la ruta "/etc/pgpool-II-91/pgpool.conf.sample-stream" 3. Tenemos habilitados los siguientes parámetros en "pgpool.conf" para permitir la autenticación por MD5 usando pgpool: - enable_pool_hba = on - pool_passwd = 'pool_passwd' - master_slave_mode = on - master_slave_sub_mode = 'stream' 4. Tenemos la siguiente configuración en el archivo "pool_hba.conf" # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: #host all all 127.0.0.1/32 trust host all all 0.0.0.0/0 md5 5. Este es el contenido del archivo "pool_passwd" usuario:md5a42ece54564eb3bd066c551b28adb29f que corresponde al valor almacenado en la base de datos: postgres=# select passwd from pg_shadow where usename = 'usuario'; passwd ------------------------------------- md5a42ece54564eb3bd066c551b28adb29f (1 fila) 6. Las consultas funcionan correctamente en el pgpool, enviando querys de escritura a la base de datos maestra y las de lectura a los nodos esclavos. 7. Cuando se inicia sesión en el pgpool usando un usuario valido y cualquier contraseña (valida ó no), el pgpool permite iniciar sesión de forma normal, cuando lo esperado es que al proporcionar una contraseña errónea se deniegue el acceso de forma inmediata. psql -h database -p 9999 -U usuario -W prototipo Password for user usuario: psql (9.1.9) Type "help" for help. prototipo=> 8. Si tratamos de establecer conexión con un usuario diferente al especificado en el archivo "pool_passwd", arroja el siguiente error: psql -h database -p 9999 -U usersinpass -W Password for user usersinpass: psql: ERROR: "MD5" authentication with pgpool failed for user "usersinpass" Lo cual significa que se esta validando que los usuarios estén registrados en el archivo de contraseñas"pool_passwd". 9. Si eliminamos el archivo "pool_passwd", reiniciamos el servicio del pgpool y tratamos de establecer una conexión/iniciar sesión aparece el siguiente mensaje de error: psql -h database -p 9999 -U usuario -W psql: ERROR: "MD5" authentication with pgpool failed for user "usuario" Esto valida que el servicio sí está consultando el archivo "pool_passwd". Les agradecemos cualquier ayuda que nos puedan brindar para solucionar este problema. Att: Juan Gutierrez VivaReal NetWork
