使用密码政策管理内置身份验证

本页面介绍了如何为 AlloyDB Omni 设置和管理密码政策。

密码政策简介

如果应用的数据库用户使用基于密码的内置方法向 AlloyDB Omni 进行身份验证,那么您可以通过强制使用安全系数高的密码来提高身份验证的安全性。您可以通过设置 AlloyDB Omni 密码政策来定义和启用密码强制执行。

密码政策的限制

AlloyDB Omni 密码政策具有以下限制:

  • 密码政策仅适用于在您设置政策后创建的密码。密码政策的更改不会影响现有用户密码。

  • 密码政策仅适用于以明文形式输入的密码。密码政策不适用于以加密字符串形式输入的密码。

设置 AlloyDB Omni 密码政策

您可以通过更新 postgresql.conf 配置文件中的 Grand Unified Configuration (GUC) 密码参数来设置密码政策。如需了解如何设置 GUC 参数,请参阅配置 AlloyDB Omni 数据库标志

AlloyDB Omni 的密码政策可以包含以下选项:

  • 禁止使用用户名:禁止在密码中使用用户名。

  • 密码复杂度:检查密码是否包含允许数量的小写字母、大写字母、数字和非字母数字字符。还会检查密码长度是否有效。

  • 密码到期:确保定期轮替密码。

如需查看 AlloyDB Omni 支持的密码政策标志列表,请参阅密码政策标志

预加载密码验证库

如需使密码政策在 AlloyDB Omni 中生效,必须加载 alloydb_password_validation 库。如需加载此库,请执行以下操作:

  1. 找到用于 AlloyDB Omni 安装的 postgresql.conf 配置文件,并在文本编辑器中将其打开。

  2. 找到 shared_preload_libraries 代码行,并检查它是否包含 alloydb_password_validation。如果不包含,则需要进行添加。完成后,您的 shared_preload_libraries 代码行应类似于以下内容:

    shared_preload_libraries='google_columnar_engine,google_job_scheduler,google_storage,alloydb_password_validation'
    

强制执行密码复杂度

如需强制执行密码复杂度政策,请执行以下操作:

  1. 验证您的 postgresql.conf 文件是否预加载密码验证库

  2. password.enforce_complexity 标志设置为 ON

  3. 使用密码政策标志定义密码政策。

例如,如需强制执行密码政策以声明密码必须包含至少一个大写字母、一个数字,且长度至少为 10 个字符,您可以在 postgresql.conf 文件中设置以下内容:

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

设置这些标志后,尝试设置不符合此密码政策的数据库用户密码的操作会失败。例如,在设置此政策后,以下 psql 客户端命令会失败,因为密码 foo 少于 10 个字符且不包含数字或大写字符。

CREATE USER USERNAME WITH PASSWORD foo;

强制执行密码到期

如需强制执行密码到期政策,请执行以下操作:

  1. 验证您的 postgresql.conf 文件是否预加载密码验证库

  2. password.enforce_expiration 标志设置为 ON

  3. password.expiration_in_days 标志设置为密码在设置后到期的天数。

  4. password.notify_expiration_in_days 标志设置为密码到期前用户开始收到密码到期通知的天数。

例如,如需强制执行密码政策以声明密码在 30 天后到期,并且在密码到期前 15 天向用户发出通知,您必须在 postgresql.conf 文件中设置以下内容:

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

如果用户的密码到期,该用户将无法连接到 AlloyDB Omni。如需重置用户密码,请执行以下操作:

  1. 使用 psql 连接到 AlloyDB Omni。例如,如果您使用 Docker 安装了 AlloyDB Omni,请运行以下命令:

    docker exec -it CONTAINER-NAME psql -h localhost -U postgres
    
  2. postgres=# 提示符下,运行以下命令:

    ALTER USER USERNAME WITH 'NEW-PASSWORD';
    

如需详细了解如何更改用户密码,请参阅 PostgreSQL 文档中的 ALTER ROLE

禁止在密码中使用用户名

如需强制执行禁止密码包含用户名的政策,请执行以下操作:

  1. 验证您的 postgresql.conf 文件是否预加载密码验证库

  2. password.enforce_password_does_not_contain_username 设置为 ON

例如,如需确保密码不包含用户名作为子字符串,您可以在 postgresql.conf 文件中设置以下内容:

  • password.enforce_password_does_not_contain_username = ON

如果设置此标志,则以下操作会失败,因为密码 alex-secret 包含用户名 alex

CREATE USER alex WITH PASSWORD 'alex-secret';

后续步骤