當您執行適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體時,您有兩個主要的網路選項。 選項包括私人存取 (虛擬網路整合) 和公用存取 (允許的 IP 位址)。
使用公用存取權時,會透過公用端點存取適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。 預設情況下,防火牆會阻止對伺服器的所有存取。 若要指定哪些 IP 主機可以存取伺服器,請建立伺服器層級 防火牆規則。 防火牆規則會指定允許的公用 IP 位址範圍。 防火牆根據每個請求的原始 IP 位址授予對伺服器的存取權限。 使用 私人存取 時,沒有可用的公用端點,而且只有位於相同網路上的主機才能存取適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。
您可以使用 Azure 入口網站或使用 Azure CLI 命令來建立防火牆規則。 您必須是訂用帳戶擁有者或訂用帳戶參與者。
伺服器層級防火牆規則會套用至相同適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體上的所有資料庫。 這些規則不會影響 Azure 入口網站網站的存取。
下圖顯示來自網際網路和 Azure 的連線嘗試如何必須先通過防火牆,才能連線到適用於 PostgreSQL 的 Azure 資料庫資料庫:
從網際網路連線
如果要求的來源 IP 位址在伺服器層級防火牆規則中指定的其中一個範圍內,則會授與連線。 否則,它將被拒絕。
例如,如果您的應用程式與適用於 PostgreSQL 的 Azure 資料庫的 Java 資料庫連線 (JDBC) 驅動程式連線,您可能會遇到此錯誤,因為防火牆會封鎖連線:
- java.util.concurrent.ExecutionException:java.lang.RuntimeException:
- org.postgresql.util.PSQLException: FATAL:主機 “123.45.67.890”、使用者 “adminuser”、資料庫 “postgresql”、SSL 沒有 pg_hba.conf 條目
備註
若要從本機電腦存取適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體,請確定網路和本機電腦上的防火牆允許在 TCP 連接埠 5432 上進行傳出通訊。
從 Azure 連線
建議您尋找任何應用程式或服務的傳出 IP 位址,並明確允許存取這些個別 IP 位址或範圍。 例如,您可以尋找 Azure App Service 應用程式的傳出 IP 位址,或使用繫結至虛擬機器的公用 IP 位址。
如果您的 Azure 服務無法使用固定傳出 IP 位址,請考慮啟用來自 Azure 資料中心所有 IP 位址的連線:
在 Azure 入口網站的 [ 網路 ] 窗格上,選取 [允許從 Azure 內的任何 Azure 服務對此伺服器進行公用存取] 核取方塊。
選取 [儲存]。
這很重要
[ 允許從 Azure 內的任何 Azure 服務對此伺服器的公用存取 ] 選項會將防火牆設定為允許來自 Azure 的所有連線,包括來自其他客戶訂用帳戶的連線。 當您使用此選項時,請確定您的登入和使用者權限將存取權限制為僅授權使用者。
以程式設計方式管理防火牆規則
除了使用 Azure 入口網站之外,您還可以使用 Azure CLI 以程式設計方式管理防火牆規則。
在 Azure CLI 中,起始和結束位址等於 0.0.0.0 的防火牆規則設定會執行相當於入口網站中的 [允許從 Azure 內的任何 Azure 服務存取此伺服器] 選項。 如果防火牆規則拒絕連線嘗試,應用程式將無法連線到適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。
疑難排解防火牆問題
當存取適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體時,請考慮下列可能性:
允許清單的變更尚未生效:對適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體的防火牆設定進行變更最多可能需要五分鐘的時間。
登入未獲授權,或使用不正確的密碼:如果登入沒有適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體的許可權,或密碼不正確,則會拒絕與伺服器的連線。 建立防火牆設定只會讓用戶端有機會嘗試連線到您的伺服器。 每個用戶端仍必須提供必要的安全性認證。
例如,如果 JDBC 用戶端的鑑別失敗,可能會出現下列錯誤:
java.util.concurrent.ExecutionException: java.lang.RuntimeException: org.postgresql.util.PSQLException: FATAL: 使用者 “yourusername” 的密碼驗證失敗
防火牆不允許動態 IP 位址:如果您有具有動態 IP 位址的網際網路連線,且無法通過防火牆,請嘗試下列其中一種解決方案:
請向您的網際網路服務提供者 (ISP) 詢問指派給存取適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體之用戶端電腦的 IP 位址範圍。 然後將 IP 位址範圍新增為防火牆規則。
改為取得用戶端電腦的靜態 IP 位址,然後將靜態 IP 位址新增為防火牆規則。
防火牆規則不適用於 IPv6 格式:防火牆規則必須是 IPv4 格式。 如果您以 IPv6 格式指定防火牆規則,您會收到驗證錯誤。