到目前为止的故事:
- 我已经安装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
然后一切都按预期进行。但是这个修改可能会导致我无法预料的不可接受的安全问题。