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

use*_*957 7 authentication passwords postgresql md5 psql

我使用md5加密密码创建了一个用户,如下所示:

create user testuser with encrypted password 'md54ca03099a7cd3945e0260801ff5972a3';
Run Code Online (Sandbox Code Playgroud)

加密密码是md5 +密码+用户名的组合

password=test
username=testuser
Run Code Online (Sandbox Code Playgroud)

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

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

psql -d dbexpress -U testuser
Run Code Online (Sandbox Code Playgroud)

它会提示输入密码.我提供了以上加密密码,因此它给出了我的错误:

psql: FATAL:  password authentication failed for user "testuser"
Run Code Online (Sandbox Code Playgroud)

但是我可以使用plaintest密码"test"登录postgresql.

Erw*_*ter 7

的认证方法md5无关系统中的目录(关键字密码的加密ENCRYPTEDCREATE ROLE):

有关身份验证方法的文档:

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

每对文档ENCRYPTED的关键字CREATE ROLE:

ENCRYPTED
UNENCRYPTED

这些关键字控制密码是否以加密方式存储在系统目录中.(如果不指定,则默认行为是由配置参数password_encryption控制.)如果所呈现的密码串已经在MD5加密的格式,然后将其存储加密原样,而不管是否ENCRYPTEDUNENCRYPTED指定(因为系统无法解密指定的加密密码字符串).这允许在转储/恢复期间重新加载加密密码.

两者都使用md5加密,但第一个用于传输,第二个用于存储.即使使用身份验证方法(设置),您仍然需要为登录提供未加密的密码.用户名在客户端和服务器上用作md5加密的salt.md5pg_hba.conf

第一个匹配的条目 pg_hba.conf

关于你的评论:

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

不要只是"添加"一个条目.应用第一个匹配线pg_hba.conf!

每篇文章pg_hba.conf:

具有匹配的连接类型,客户端地址,请求的数据库和用户名的第一个记录用于执行身份验证.

在所有引用中都强调了我的意思.