Gestionar la autenticación integrada mediante políticas de contraseñas

Selecciona una versión de la documentación:

En esta página se describe cómo puedes definir y gestionar políticas de contraseñas para AlloyDB Omni.

Acerca de las políticas de contraseñas

Si los usuarios de la base de datos de tu aplicación se autentican con AlloyDB Omni mediante el método integrado basado en contraseñas, puedes reforzar la seguridad de la autenticación exigiendo el uso de contraseñas seguras. Puedes definir y habilitar la aplicación de contraseñas configurando una política de contraseñas de AlloyDB Omni.

Limitaciones de las políticas de contraseñas

Las políticas de contraseñas de AlloyDB Omni tienen las siguientes limitaciones:

  • Las políticas de contraseñas se aplican a las contraseñas creadas solo después de que las hayas definido. Los cambios en la política de contraseñas no afectan a las contraseñas de los usuarios.

  • Las políticas de contraseñas se aplican solo a las contraseñas introducidas como texto sin formato. Las políticas de contraseñas no se aplican a las contraseñas introducidas como cadenas cifradas.

Definir una política de contraseñas de AlloyDB Omni

Para definir una política de contraseñas, debes actualizar los parámetros de contraseñas de la configuración unificada general (GUC) en el archivo de configuración postgresql.conf. Para saber cómo definir un parámetro GUC, consulta Configurar las marcas de la base de datos de AlloyDB Omni.

Una política de contraseñas de AlloyDB Omni puede incluir las siguientes opciones:

  • No permitir nombre de usuario: impide que se use el nombre de usuario en la contraseña.

  • Complejidad de la contraseña: comprueba si la contraseña contiene el número permitido de caracteres alfabéticos en minúscula, mayúscula, numéricos y no alfanuméricos. Comprueba también si la longitud de la contraseña es válida.

  • Vencimiento de contraseñas: asegúrate de que las contraseñas se cambien periódicamente.

Para ver una lista de las marcas de la política de contraseñas que admite AlloyDB Omni, consulta Marcas de la política de contraseñas.

Precargar la biblioteca de validación de contraseñas

Para que una política de contraseñas entre en vigor en AlloyDB Omni, se debe cargar la biblioteca alloydb_password_validation. Para cargar esta biblioteca, sigue estos pasos:

  1. Busca el archivo de configuración postgresql.conf de tu instalación de AlloyDB Omni y ábrelo en un editor de texto.

  2. Busca la línea shared_preload_libraries y comprueba si incluye alloydb_password_validation. Si no es así, tendrás que añadirla. Cuando haya terminado, la línea shared_preload_libraries tendrá un aspecto similar al siguiente:

    shared_preload_libraries='google_columnar_engine,google_job_scheduler,google_storage,alloydb_password_validation'
    

Requerir contraseñas complejas

Para aplicar una política de complejidad de contraseñas, haz lo siguiente:

  1. Verifica que tu archivo postgresql.conf precarga la biblioteca de validación de contraseñas.

  2. Asigna el valor ON a la marca password.enforce_complexity.

  3. Usa marcas de política de contraseñas para definir tu política de contraseñas.

Por ejemplo, para aplicar una política de contraseñas que indique que una contraseña debe contener al menos una letra mayúscula, un número y tener una longitud mínima de 10 caracteres, debe definir lo siguiente en el archivo postgresql.conf:

  • password.enforce_complexity = ON
  • password.min_uppercase_letters = 1
  • password.min_numerical_chars = 1
  • password.min_pass_length = 10

Una vez definidas estas marcas, si se intenta establecer una contraseña de usuario de base de datos que no cumpla esta política de contraseñas, se producirá un error. Por ejemplo, con esta política definida, el siguiente comando de cliente psql falla porque la contraseña foo tiene menos de 10 caracteres y no contiene ningún número ni ninguna letra mayúscula.

CREATE USER USERNAME WITH PASSWORD foo;

Forzar la caducidad de las contraseñas

Para aplicar la política de caducidad de contraseñas, haz lo siguiente:

  1. Verifica que tu archivo postgresql.conf precarga la biblioteca de validación de contraseñas.

  2. Asigna el valor ON a la marca password.enforce_expiration.

  3. Define la marca password.expiration_in_days en el número de días que deben transcurrir después de definir una contraseña para que caduque.

  4. Define la marca password.notify_expiration_in_days con el número de días que faltan para que caduque una contraseña y que un usuario empieza a recibir notificaciones de caducidad de la contraseña.

Por ejemplo, para aplicar una política de contraseñas que indique que las contraseñas caducan al cabo de 30 días y que se notifica a los usuarios 15 días antes de que caduquen, debes definir lo siguiente en el archivo postgresql.conf:

  • password.enforce_expiration = ON
  • password.expiration_in_days = 30
  • password.notify_expiration_in_days = 15

Si la contraseña de un usuario caduca, ese usuario no podrá conectarse a AlloyDB Omni. Para cambiar la contraseña de un usuario, sigue estos pasos:

  1. Conéctate a AlloyDB Omni mediante psql. Por ejemplo, si has instalado AlloyDB Omni con Docker, ejecuta el siguiente comando:

    docker exec -it CONTAINER-NAME psql -h localhost -U postgres
    
  2. En el símbolo del sistema postgres=#, ejecuta el siguiente comando:

    ALTER USER USERNAME WITH 'NEW-PASSWORD';
    

Para obtener más información sobre cómo cambiar la contraseña de un usuario, consulta ALTER ROLE en la documentación de PostgreSQL.

No permitir nombres de usuario en las contraseñas

Para aplicar la política que impide que una contraseña contenga un nombre de usuario, haz lo siguiente:

  1. Verifica que tu archivo postgresql.conf precarga la biblioteca de validación de contraseñas.

  2. Asigna el valor ON a password.enforce_password_does_not_contain_username.

Por ejemplo, para asegurarte de que una contraseña no contenga un nombre de usuario como subcadena, debes definir lo siguiente en tu archivo postgresql.conf:

  • password.enforce_password_does_not_contain_username = ON

Si se define esta marca, la siguiente operación falla porque la contraseña alex-secret contiene el nombre de usuario alex:

CREATE USER alex WITH PASSWORD 'alex-secret';

Siguientes pasos