Postgresql服务器在远程连接时不要求密码

8

我发现我的postgresql数据库服务器在通过pgadmin远程连接时不需要用户postgres 的密码。我的意思是当我从本地计算机通过pgAdmin连接到远程数据库服务器时。

我确实在psql中添加了一个密码,ALTER USER postgres PASSWORD 'mypassword'

这是我的pg_hba.config文件:

/usr/local/pgsql/bin/psql -qAt -c "show hba_file" | xargs grep -v -E '^[[:space:]]*#'

local   all             all                                     trust
host    all             all             127.0.0.1/32            md5

host    all             all               0.0.0.0/0             md5
host    all             all             ::1/128                 md5

所以,我不是很理解这里到底发生了什么。

有人能帮忙吗?

非常感谢。

更新:

如果我改变:

local   all             all                                     trust

为了

local   all             all                                     md5

现在,本地连接(通过SSH)将要求输入密码(之前没有要求密码)但远程连接仍然可以无需密码连接。
实际上,我尝试从另一台服务器的Rails应用程序连接到此数据库服务器,而无需密码,Rails服务器也可以正常启动。

方便起见,此处放置结果

这个问题的真正原因是.pgpass文件。Mac会将密码存储在用户主目录下的.pgpass文件中。每次用户尝试无密码登录时,PostgreSQL都会为用户发送密码。

官方文档在这里


1
我在 psql 中添加了一个密码,ALTER USER postgres PASSWORD 'mypassword' - Yunwei.W
1
你认为自己是如何在PgAdmin中远程连接的?你是否明确指定了主机 = 127.0.0.1 或从远程主机连接?如果您正在通过Unix套接字连接,则根据您的配置,不应该期望出现密码提示,因为您正在使用Unix套接字(“本地”)的“信任”模式。 - Craig Ringer
你的Rails应用程序是否真正创建了连接并与数据库通信?有时,Web应用程序直到实际使用时才建立连接。 - jpmc26
@jpmc26 是的。我尝试使用一个随机密码运行相同的Rails应用程序,连接尝试失败了(告诉我密码验证失败)。这太奇怪了。我现在正在尝试删除pg_hba.conf中的所有设置,并逐行手动添加它们。对此还有其他想法吗? - Yunwei.W
你能否更新问题并附上一条注释,提到解决方案,即 .pgpass 文件似乎允许你无需密码连接(但实际上不是这样)? - Sam Hiatt
显示剩余3条评论
2个回答

18

感谢大家的评论和回答!

但这个问题的真正原因是 .pgpass 文件。 我的mac将密码本地存储在我的用户主目录下的 .pgpass 文件中。 然后,每次我尝试无密码登录时,PostgreSQL会为我发送密码。所以这就是我遇到的问题....

再次感谢所有的回复和评论!

有关更多详细信息,请参见此处


谢谢!我也遇到了这个问题。非常有帮助。 - jlonganecker

3

阅读Postgresql.org上的文档。

https://www.postgresql.org/docs/current/auth-pg-hba-conf.html

我建议您将用户字段更改为允许远程连接的少数用户的名称:

host    all             john,charles    0.0.0.0/0   scram-sha-256
host    all             john,charles    ::1/128     scram-sha-256

另外,出于安全考虑,我建议您考虑使用 hostssl,并指定可以远程访问的数据库名称:

hostsll webapp123     john,charles    0.0.0.0/0     scram-sha-256

如果远程访问仅限于特定的计算机,请指定它们的静态IP地址(如果使用DHCP,则使用相应的掩码)。

hostsll webapp123     john,charles    1.2.3.4/32    scram-sha-256

这样,您只会影响数据库webapp123,仅限用户John和Charles从计算机1.2.3.4执行。根据文档所述,您可以拥有任意数量的条目,因此如果要添加测试服务器(即在家中的服务器),则可以添加一行,使其看起来像这样:
hostsll webapp123     john,charles    1.2.3.4/32    scram-sha-256
hostsll webapp123     henry           home-ip/32    scram-sha-256

如果您不指定用户,那么您可能允许任何用户访问,包括没有密码的用户,其中一个用户被选中并且可以使用...

当然,我强烈建议您不要在数据库中命名具有管理权限的用户,除非您还指定了他的静态IP地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接