在`pg_hba.conf` 中使用主机名?

Jac*_*sen 8 postgresql authentication postgresql-9.6

根据 PostgreSQL 文档:

以点 (.) 开头的主机名规范与实际主机名的后缀匹配。所以 .example.com 将匹配 foo.example.com(但不仅仅是 example.com)。

所以我把这一行放进去pg_hba.conf并重新启动 PostgreSQL:

hostssl market_data market_data_access .horsholm.dk md5
Run Code Online (Sandbox Code Playgroud)

然后我尝试连接到数据库:

psql "postgresql://market_data_access@<server-IP>:5433/market_data?sslmode=require"
Run Code Online (Sandbox Code Playgroud)

我得到了这个,而不是密码提示:

psql: FATAL:  no pg_hba.conf entry for host "195.249.206.131", user "market_data_access", database "market_data", SSL on
Run Code Online (Sandbox Code Playgroud)

为了检查,我对错误消息中列出的 IP 地址进行反向 DNS 查找:

$ host 195.249.206.131
131.206.249.195.in-addr.arpa is an alias for 131.129-190.206.249.195.in-addr.arpa.
131.129-190.206.249.195.in-addr.arpa domain name pointer kommune.horsholm.dk.
$
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Dan*_*ité 8

195.249.206.131解析为kommune.horsholm.dk与通配符匹配是不够的。

检查后,Postgres 将尝试解决kommune.horsholm.dk并发现它没有解决195.249.206.131(因为在这种特殊情况下它根本没有解决)

$ host kommune.horsholm.dk
Host kommune.horsholm.dk not found: 3(NXDOMAIN)
Run Code Online (Sandbox Code Playgroud)

文档引用

如果指定了主机名(任何不是 IP 地址范围或特殊关键字的内容都被视为主机名),则将该名称与客户端 IP 地址的反向名称解析结果进行比较(例如,反向 DNS查找,如果使用 DNS)。主机名比较不区分大小写。如果匹配,则对主机名执行前向名称解析(例如,前向 DNS 查找)以检查其解析为的任何地址是否与客户端的 IP 地址相同。如果两个方向都匹配,则认为该条目匹配