所以我有 postgresql 数据库,并且在 pg_hba.conf 文件中我通过 md5 对用户进行身份验证。
我通常使用以下命令创建用户:
CREATE USER username WITH PASSWORD 'password';
来自 postgresql网站如果您未指定 ENCRYPTED 或 UNENCRYPTED,则:
默认行为由配置参数 password_encryption 决定
当在 CREATE USER 或 ALTER ROLE 中指定密码而没有写入 ENCRYPTED 或 UNENCRYPTED 时,此参数决定是否要加密密码。默认为开启(加密密码)。
由于 pg_hdba.conf 设置为使用 md5 进行身份验证,因此我确信我使用的命令会自动对我输入的密码进行 MD5 加密。然而,postgres 网站还说:
如果显示的密码字符串已经是 MD5 加密格式,则无论指定了 ENCRYPTED 还是 UNENCRYPTED,它都会按原样加密存储(因为系统无法解密指定的加密密码字符串)。
那么在 CREATE USER 命令中使用 MD5 哈希有什么好处吗?另外,该命令如何区分密码字符串和 MD5 哈希?如果使用 MD5 哈希,是否应该省略“密码”周围的单引号?
答案1
那么在 CREATE USER 命令中使用 MD5 哈希有什么好处吗?
提供预哈希输入的唯一好处CREATE USER ... WITH PASSWORD
是,如果log_statement = 'all'
启用,则不会有明文进入日志的风险。但是,由于知道哈希值就足以验证用户身份,因此这对您没有任何帮助。
一般来说,您只需使用CREATE USER ... WITH ENCRYPTED PASSWORD
它并完成它即可。
PostgreSQL 的协议缺乏对强摘要函数和适当的 HMAC 交换的支持,因此除了受信任的本地网络之外的任何网络上使用 SSL 都是明智的。