如何允许PostgreSQL服务器来自任何地方的连接?

3
我不理解 pg_hba.conf 文档。它似乎在说我可以添加这个条目:
host    all    all                 md5

或者这个条目

host    all    all     *.*.*.*/*   md5

为了允许从任何地方访问数据库。

但是,如果我不拥有以下这些行中的任何一个,我将无法使用我的VirtualBox guest IP 10.0.2.15 连接到本地数据库。

host    all   all     127.0.0.1/32  md5

然后我甚至无法使用0.0.0.0127.0.0.1进行连接。

我需要添加哪一行以允许使用密码验证从任何IP(包括在我的VirtualBox中的Docker容器内)访问?

这是我当前的标准hb_pga.conf文件:

local   all             postgres                                peer
local   all             all                                     peer
host    all             all            127.0.0.1/32             md5
host    all             all             ::1/128                 md5

我看到0.0.0.0/0可以工作。但是为什么?为什么上面的那些不行? - Richard
我可能会问一个愚蠢的问题,但是你在尝试登录时收到了什么错误信息? - Philip Couling
pg_hba.conf 中的某些内容不允许该地址。 - Richard
有时候错误的精确措辞很重要。 - Philip Couling
1个回答

8

以下所有内容均基于Postgres 9.5的文档,但我不知道此语法是否有任何重大更改,因此它应适用于任何近期版本。

据我所知,该行代码:

host    all    all                 md5

“isn't valid syntax”不是有效的语法。当使用host记录类型时,以下格式可用:

host       database  user  address              auth-method  [auth-options]
host       database  user  IP-address  IP-mask  auth-method  [auth-options]

您提供的参数只有三个,但实际上需要至少四个参数。

根据您的评论,代码行

host    all    all 0.0.0.0/0 md5

将允许所有IP地址连接(基于后续的密码验证)。/0是掩码,用于验证IP地址的哪些位(字面上的位)是否有效。 /0表示您要忽略整个内容,即允许所有地址。掩码1.2.3.4/0意味着完全相同的事情。通常不建议从任何地方访问,但如果处理非公共VM或Docker容器,则可以。
如果使用IPv6连接,则语法非常相似:
host    all    all ::/0 md5

就我所知,我从未遇到过这种语法

host    all    all     *.*.*.*/*   md5

您可能还需要为IPv6连接添加一个条目。 - user330315
只有当其他人知道你的密码时,公共数据库才存在危险,对吗?只要密码非常保密,即使您允许任何连接,他们也无法做任何事情,对吗? - Richard
有点像。最好的方法是完全拒绝连接,这样没有人知道那里甚至有一个数据库。你可以通过锁门来阻止小偷,但如果你能完全隐藏你的房子,为什么不这样做呢? - iainn
@Richard:他们仍然可以尝试暴力破解密码。即使他们没有成功,这仍然是一个麻烦。最好不要给他们机会。 - Nick Barnes
谢谢,最终通过您的答案成功连接。 - dgxhubbard

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