Postgresql

在 pg_hba.conf 中使用主機名?

  • March 18, 2022

根據 PostgreSQL 文件:

以點 (.) 開頭的主機名規範匹配實際主機名的後綴。所以 .example.com 將匹配 foo.example.com(但不僅僅是 example.com)。

所以我把這一行放進去pg_hba.conf並重新啟動 PostgreSQL:

hostssl market_data market_data_access .horsholm.dk md5

然後我嘗試連接到數據庫:

psql "postgresql://market_data_access@<server-IP>:5433/market_data?sslmode=require"

我得到的不是密碼提示,而是:

psql: FATAL:  no pg_hba.conf entry for host "195.249.206.131", user "market_data_access", database "market_data", SSL on

為了檢查,我對錯誤消息中列出的 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.
$

我究竟做錯了什麼?

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)

文件報價

如果指定了主機名(任何不是 IP 地址範圍或特殊關鍵字的內容都被視為主機名),則將該名稱與客戶端 IP 地址的反向名稱解析的結果進行比較(例如,反向 DNS查找,如果使用 DNS)。主機名比較不區分大小寫。如果匹配,則對主機名執行前向名稱解析(例如,前向 DNS 查找),以檢查它解析到的任何地址是否等於客戶端的 IP 地址。如果兩個方向都匹配,則認為該條目匹配

反向 DNS 查找 IP195.249.206.131未解析為具有 name 的主機*.horsholm.dk。如果我們研究您的host 195.249.206.131命令的輸出,您會發現響應不包含 IP 到主機的精確映射(您得到的只是 IP 範圍)。成功的反向 DNS 查找如下所示:

host 10.29.62.87
87.62.29.10.in-addr.arpa domain name pointer vm-test1.vpc.dev.net.

引用自:https://dba.stackexchange.com/questions/212020