當你為 適用於 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:在 pg_hba.conf 中沒有對應主機「123.45.67.890」、使用者「adminuser」、資料庫「postgresql」、SSL 的項目
備註
要從本地電腦存取 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器,請確保你的網路與本地電腦的防火牆允許透過 TCP 埠 5432 進行外撥通訊。
從 Azure 連線
找出任何應用程式或服務的外發出 IP 位址,並明確允許存取這些個別的 IP 位址或範圍。 例如,您可以尋找 Azure App 服務 應用程式的傳出 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 格式的防火牆規則,您會收到驗證錯誤。