使用 md5 加密密码而不是明文密码登录 PostgreSQL

Posted

技术标签:

【中文标题】使用 md5 加密密码而不是明文密码登录 PostgreSQL【英文标题】:Login to PostgreSQL using md5 encrypted password and not plaintext password 【发布时间】:2014-09-14 15:20:24 【问题描述】:

我已经创建了一个使用 md5 加密密码的用户,如下:

create user testuser with encrypted password 'md54ca03099a7cd3945e0260801ff5972a3';

加密后的密码是“md5”+md5(密码+用户名)的组合

password=test
username=testuser

使用 md5 方法在 pg_hba.conf 文件中添加 testuser 条目

现在我正在尝试使用上面创建的用户登录,如下所示:

psql -d dbexpress -U testuser

它提示输入密码。我提供了上面的加密密码,所以它给了我错误:

psql: FATAL:  password authentication failed for user "testuser"

但我可以使用纯密码“test”登录到 postgresql。

【问题讨论】:

您必须将passwordpsql -d dbexpress -U testuser 一起传递,这是因为您有Added entry for testuser in pg_hba.conf file with md5 method 或将md5 Method 更改为Trust 什么是'md54ca03099a7cd3945e0260801ff5972a3'?是您首先生成然后放入上述查询吗? 您提供的密码是什么?是'md54ca03099a7cd3945e0260801ff5972a3'吗? 【参考方案1】:

认证方式md5不直接管理系统目录中密码的加密(CREATE ROLE中的关键字ENCRYPTED):

Postgres 10 或更高版本

注意这个update in Postgres 10

为密码协商和存储添加 SCRAM-SHA-256 支持 (Michael Paquier、Heikki Linnakangas)

这提供了比现有 md5 协商更好的安全性,并且 存储方式。

The manual:

为了便于从 md5 方法过渡到较新的 SCRAM 方法,如果 md5 被指定为pg_hba.conf 中的方法,但用户的密码在 服务器为 SCRAM 加密(见下文),然后基于 SCRAM 将自动选择身份验证。

Postgres 9.6 或更早版本

Per documentation on the authentication method:

基于密码的身份验证方法是 md5 和密码。这些 除了发送密码的方式外,其他方法的操作类似 跨连接,分别是 MD5 散列和明文。

Per documentation on the ENCRYPTED keyword in CREATE ROLE:

ENCRYPTEDUNENCRYPTED

这些关键字控制密码是否在系统目录中加密存储。 (如果两者都没有指定,则默认行为 由配置参数 password_encryption 确定。)如果 显示的密码字符串已经是 MD5 加密格式,那么 它按原样加密存储,无论是ENCRYPTED 还是 指定UNENCRYPTED(因为系统无法解密 指定的加密密码字符串)。这允许重新加载 转储/恢复期间的加密密码。

两者都使用 md5 加密,但第一个与 transport 有关,第二个与 storage 有关。即使使用身份验证方法md5(在pg_hba.conf 中设置),您仍需要为您的登录提供未加密密码。用户名作为 salt 用于客户端和服务器上的 md5 加密。

pg_hba.conf 中的第一个匹配条目

关于你的评论:

使用 md5 方法在 pg_hba.conf 文件中添加 testuser 条目。

不要只是“添加”一个条目。应用pg_hba.conf 中的第一个 行!

pg_hba.conf上的手册:

第一条记录具有匹配的连接类型、客户端地址、 请求的数据库,并使用用户名进行身份验证。

所有引号都用粗体强调。

【讨论】:

是的,我已经添加了条目,并确保它在 pg_hba.conf 文件中考虑了这个条目本身。我的要求是我通过 jdbc 传递加密密码,因此 Postgres 应该将此密码识别为加密并允许用户登录,或者是否有任何机制以便我们可以在登录前在 postgres 端解密密码?

以上是关于使用 md5 加密密码而不是明文密码登录 PostgreSQL的主要内容,如果未能解决你的问题,请参考以下文章

asp后台MD5加密登陆,修改后无法登陆。

BURP使用技巧——对经MD5哈希的密码进行暴破

Java使用MD5加盐对密码进行加密处理,附注册和登录加密解密处理

asp.net 开发时用户注册和登录密码MD5加密代码是写在前台还是后台?如果是前台为啥网上很多人说是写在CS

论php登录账户和密码及cookies加密策略

Base64加密