所以我有postgresql数据库和pg_hba.conf文件我通过MD5validation用户。
我通常使用以下命令创build用户:
CREATE USER username WITH PASSWORD 'password';
如果你不指定ENCRYPTED或UNENCRYPTED,那么在postgresql 网站上 :
默认行为由configuration参数password_encryption决定
当在CREATE USER或ALTER ROLE中指定密码而不写入ENCRYPTED或UNENCRYPTED时,此参数确定是否要对密码进行encryption。 默认打开(encryption密码)。
由于pg_hdba.conf被设置为使用md5进行身份validation,所以我相当确信我正在使用的命令是自动MD5encryption我input的密码。 Howerver,postgres网站也说:
如果提供的密码string已经是MD5encryption的格式,那么无论是否指定了ENCRYPTED或UNENCRYPTED(因为系统不能解密指定的encryption密码string),它都按原样encryption存储。
那么在CREATE USER命令中使用MD5散列有什么好处吗? 另外,该命令如何区分密码string和MD5哈希? 如果使用MD5散列,你应该省略“密码”的单引号吗?
那么在CREATE USER命令中使用MD5散列有什么好处吗?
将预散列input提供给CREATE USER ... WITH PASSWORD的唯一好处是,如果log_statement = 'all'打开,那么不会有明文进入日志的风险。 但是,由于知道散列足以作为用户进行身份validation,所以对您没有任何帮助。
一般来说,你应该只使用CREATE USER ... WITH ENCRYPTED PASSWORD并且完成它。
PostgreSQL的协议缺乏对强大的摘要function和适当的HMAC交换的支持,所以除了可信任的本地networking之外,使用SSL是明智的。