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

本页介绍了如何为 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';

后续步骤