嗨我是postgresql的新手。但我有sql server的背景。我试着了解postgres的安全概念。我使用windows 10,我想限制postgres用户的登录没有密码。我搜索了这个,据我了解这个可以在pg_hba.config中实现。我改变了
host all all 127.0.0.1/32 trust
至
host all all 127.0.0.1/32 md5
并重新启动postgresql service.But仍然postgresql用户可以登录没有密码或密码错误。密码验证似乎不起作用。
当我尝试从另一台机器登录时。密码验证有效。因为
host all all 0.0.0.0/0 md5
在pg_hba.config中工作。
为什么它不能在localhost中为postgres用户工作?我怎样才能实现这一目标?
pg_hba.config的内容
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# IPv4 local & remote connections:
host all all 127.0.0.1/32 md5
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::1/128 md5
顺便说一句,我使用postgresql 11版本。
最终我解决了这个问题。正如我所说的,我使用的是Windows 10.当我深入搜索这个问题时,我发现了Postgresql user can login without password or with wrong password in same machine even if I switch from trust to md5 in pg_hba.conf帖子。这篇帖子包含一条评论“看起来我在这里设置了密码导致了问题, C:\ Users ***** \ AppData \ Roaming / postgresql / pgpass.conf现在全部排序,谢谢!“当我在这个目录中查看pgpass.conf并清空此文件时,它可以正常工作。因此,如果我们进行md5身份验证并希望在命令promt中强制使用密码,我们必须清空此文件。正如postgresql文档在https://www.postgresql.org/docs/9.1/libpq-pgpass.html中所说,如果连接需要密码,如md5身份验证,则隐式使用此pgpass.conf。如果我们想要更高的安全性,我们必须实现此文件并清空它。