根据 PostgreSQL 代码仓库的最新动态,近日有维护者提交了“弃用 MD5 密码支持”的 commit。
该维护者指出,MD5 被认为不适合用作加密散列算法已有一段时间。
此外,PostgreSQL 中的 MD5 密码散列很容易受到传递散列攻击,即知道用户名和散列密码就足以进行身份验证。v10 中添加的 SCRAM-SHA-256 方法不存在这些问题,被认为优于 MD5。
根据讨论,本次 commit 将 PostgreSQL 中的 MD5 密码支持标记为弃用,并将在未来的版本中删除。
现在,文档中包含了多个弃用通知,而 CREATE ROLE 和 ALTER ROLE 在设置 MD5 密码时也会发出弃用警告。用户可以通过将 md5_password_warnings 参数设置为 "off" 来禁用这些警告。
这可能是 PostgreSQL 18 明确告知 MD5 密码支持已过时并将在未来移除的程度。PostgreSQL 19 将支持使用 MD5 密码升级,并允许使用它们进行身份验证,但禁止创建新密码。
之后,PostgreSQL 20 将禁止使用 MD5 密码进行验证。
最后,在 PostgreSQL 21 中,将禁止使用 MD5 密码升级,并且 PostgreSQL 内部将不再提供 MD5 密码支持。因此,如果出于某种原因需要,PostgreSQL 中的 MD5 密码支持仍将存在数年,但现在已被正式弃用,移除路径也已启动。
https://github.com/postgres/postgres/commit/db6a4a985bc09d260d5c29848e3c97f080646a53https://www.postgresql.org/message-id/ZwbfpJJol7lDWajL%40nathanhttps://www.postgresql.org/message-id/attachment/166823/v4-0001-Deprecate-MD5-passwords.patch