我使用md5加密密码创建了一个用户,如下所示:
create user testuser with encrypted password 'md54ca03099a7cd3945e0260801ff5972a3';
加密密码是md5 +密码+用户名的组合
password=test username=testuser
使用md5方法在pg_hba.conf文件中添加了testuser条目
现在我尝试使用上面创建的用户登录,如下所示:
psql -d dbexpress -U testuser
它会提示输入密码.我提供了以上加密密码,因此它给出了我的错误:
psql: FATAL: password authentication failed for user "testuser"
但是我可以使用plaintest密码"test"登录postgresql.
的认证方法md5
是无关系统中的目录(关键字密码的加密ENCRYPTED
中CREATE ROLE
):
有关身份验证方法的文档:
基于密码的身份验证方法是md5和密码.除了通过连接发送密码的方式外,这些方法的操作类似,分别是MD5散列和明文.
每对文档ENCRYPTED
的关键字在CREATE ROLE
:
ENCRYPTED
UNENCRYPTED
这些关键字控制密码是否以加密方式存储在系统目录中.(如果不指定,则默认行为是由配置参数password_encryption控制.)如果所呈现的密码串已经在MD5加密的格式,然后将其存储加密原样,而不管是否
ENCRYPTED
或UNENCRYPTED
指定(因为系统无法解密指定的加密密码字符串).这允许在转储/恢复期间重新加载加密密码.
两者都使用md5加密,但第一个用于传输,第二个用于存储.即使使用身份验证方法(设置),您仍然需要为登录提供未加密的密码.用户名在客户端和服务器上用作md5加密的salt.md5
pg_hba.conf
pg_hba.conf
关于你的评论:
使用md5方法在pg_hba.conf文件中添加了testuser条目.
不要只是"添加"一个条目.应用第一个匹配线pg_hba.conf
!
每篇文章pg_hba.conf
:
具有匹配的连接类型,客户端地址,请求的数据库和用户名的第一个记录用于执行身份验证.
在所有引用中都强调了我的意思.