密码政策简介
如果应用的数据库用户使用基于密码的内置方法向 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 库。如需加载此库,请执行以下操作:
找到用于 AlloyDB Omni 安装的
postgresql.conf配置文件,并在文本编辑器中将其打开。找到
shared_preload_libraries代码行,并检查它是否包含alloydb_password_validation。如果不包含,则需要进行添加。完成后,您的shared_preload_libraries代码行应类似于以下内容:shared_preload_libraries='google_columnar_engine,google_job_scheduler,google_storage,alloydb_password_validation'
强制执行密码复杂度
如需强制执行密码复杂度政策,请执行以下操作:
验证您的
postgresql.conf文件是否预加载密码验证库。将
password.enforce_complexity标志设置为ON。使用密码政策标志定义密码政策。
例如,如需强制执行密码政策以声明密码必须包含至少一个大写字母、一个数字,且长度至少为 10 个字符,您可以在 postgresql.conf 文件中设置以下内容:
password.enforce_complexity = ONpassword.min_uppercase_letters = 1password.min_numerical_chars = 1password.min_pass_length = 10
设置这些标志后,尝试设置不符合此密码政策的数据库用户密码的操作会失败。例如,在设置此政策后,以下 psql 客户端命令会失败,因为密码 foo 少于 10 个字符且不包含数字或大写字符。
CREATE USER USERNAME WITH PASSWORD foo;
强制执行密码到期
如需强制执行密码到期政策,请执行以下操作:
验证您的
postgresql.conf文件是否预加载密码验证库。将
password.enforce_expiration标志设置为ON。将
password.expiration_in_days标志设置为密码在设置后失效的天数。将
password.notify_expiration_in_days标志设置为密码到期前用户开始收到密码到期通知的天数。
例如,如需强制执行密码政策以声明密码在 30 天后到期,并且在密码到期前 15 天向用户发出通知,您必须在 postgresql.conf 文件中设置以下内容:
password.enforce_expiration = ONpassword.expiration_in_days = 30password.notify_expiration_in_days = 15
如果用户的密码到期,该用户将无法连接到 AlloyDB Omni。如需重置用户密码,请执行以下操作:
使用
psql连接到 AlloyDB Omni。例如,如果您使用 Docker 安装了 AlloyDB Omni,请运行以下命令:docker exec -it CONTAINER-NAME psql -h localhost -U postgres在
postgres=#提示符下,运行以下命令:ALTER USER USERNAME WITH 'NEW-PASSWORD';
如需详细了解如何更改用户密码,请参阅 PostgreSQL 文档中的 ALTER ROLE。
禁止在密码中使用用户名
如需强制执行禁止密码包含用户名的政策,请执行以下操作:
验证您的
postgresql.conf文件是否预加载密码验证库。将
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';