当我已经修改了此文件时,为什么 Postgres 会告诉我“主机没有 pg_hba.conf 条目...”?

当我已经修改了此文件时,为什么 Postgres 会告诉我“主机没有 pg_hba.conf 条目...”?

到目前为止的故事:

  • 我已经安装Postgres在我的Linux基于桌面(HOST)。
  • 我已经在 HOST 上创建了一个包含测试数据的测试数据库。
  • 我已添加到配置文件主机上的文件:host samerole all 0.0.0.0/0 md5
  • 我已添加到PostgreSQL 配置文件主机上的文件:listen_addresses = '*'
  • 我已经安装PGAdmin4在我的 Chromebook(客户端)的 Linux 虚拟机上。
  • HOST的IP地址为192.168.1.159,端口为5432。
  • 如果我telnet 192.168.1.159 5432在客户端上运行,它似乎可以连接。
  • 但是,如果尝试通过 PGAdmin GUI 连接到相同的 IP 地址和端口,它会响应:

无法连接到服务器:严重错误:主机“192.168.1.208”、用户“postgis_user”、数据库“postgis_prototype”没有 pg_hba.conf 条目,SSL 已打开严重错误:主机“192.168.1.208”、用户“postgis_user”、数据库“postgis_prototype”没有 pg_hba.conf 条目,SSL 已关闭

  • 如果我尝试通过命令行连接,我会得到非常相似的响应。

有人知道为什么会发生这种情况吗?我该怎么做才能解决这个问题?

答案1

文档samerole,在的含义数据库列是:

值 samerole 指定请求的用户必须是与请求的数据库同名的角色的成员。

错误消息表明尝试使用 进行拒绝的连接user "postgis_user", database "postgis_prototype"。由于用户名和数据库名称不同,因此 的规则samerole无法匹配(好吧,除非有一个 的postgis_prototype角色postgis_user作为成员,但如果您已设置该角色,那么您肯定会在问题中提到它)。

最简单的解决方案可能是在第二列中列出授权数据库,在第三列中列出授权用户,然后忘记使用samerole

您可以在这些列中使用逗号分隔的列表,或将它们分成几个规则。

中的规则pg_hba.conf按从上到下的顺序进行评估,在第一个匹配的规则处停止。

如果您的服务器可以通过互联网访问,那么接受所有内容的解决方案host all all 0.0.0.0/0 md5确实不推荐。有些恶意机器人会尝试以postgres超级用户身份连接到每个可访问的 Postgres 安装。

答案2

一个潜在的解决方案:如果我将添加到的行更改为配置文件到:

host all all 0.0.0.0/0 md5

然后一切都按预期进行。但是这个修改可能会导致我无法预料的不可接受的安全问题。

相关内容