Postgres 用户的密码有多安全?
创建新的数据库用户时,存储的密码是否经过哈希处理和加盐处理?
Postgres 用户的密码有多安全?
创建新的数据库用户时,存储的密码是否经过哈希处理和加盐处理?
Postgres 使用 MD5 作为算法,用户名为“salt”。
使用盐通常可以防止计算哈希,例如在彩虹表中。使用用户名作为盐只能部分解决这个问题。可以预先计算常见用户名的哈希值,例如“root”或“postgres”。
此外,MD5 是最快的加密哈希之一。每秒可以计算 10¹¹ MD5 哈希。这使得使用暴力攻击(即尝试多个密码)破解密码成为可能。现代密码散列函数的设计速度很慢,因此暴力攻击需要很长时间。
在我看来,Postgres 密码存储技术不符合现代安全标准。您可以通过使用长的随机密码而不是在其他任何地方重复使用该密码来缓解这种情况。
Pg 将其密码存储在 pg_authid
密码(可能已加密);如果没有,则为空。如果密码已加密,此列将以字符串 md5 开头,后跟 32 个字符的十六进制 MD5 哈希。MD5 散列将用户的密码与用户名连接起来。例如,如果用户 joe 有密码 xyzzy,PostgreSQL 将存储 xyzzyjoe 的 md5 哈希。不遵循该格式的密码被假定为未加密。
你可以通过运行看到它们
SELECT rolpassword
FROM pg_authid;
请注意,并非所有用户都 auth md5。您可以让用户使用 PG Auth 模块或 PAM 模块对大多数东西进行身份验证。