Azure SQL Database 和 Azure Synapse IP 防火牆規則

適用於:Azure SQL 資料庫 Azure Synapse Analytics

例如,您在 Azure SQL Database 或名稱為 mysqlserver 的 Azure Synapse Analytics 中建立新伺服器時,伺服器層級防火牆會封鎖該伺服器公用端點的所有存取權 (可於 mysqlserver.database.windows.net 存取)。 簡單起見,SQL Database 會用於參考 SQL Database 和 Azure Synapse Analytics。 本文「不」適用於 Azure SQL Database 受控執行個體。 如需網路設定的詳細資訊,請參閱將您的應用程式連線至 Azure SQL 受控執行個體

注意

Microsoft Entra 標識符 先前稱為 Azure Active Directory (Azure AD)。

防火牆的運作方式

來自網際網路和 Azure 的連線嘗試必須先通過防火牆,才能到達您的伺服器或資料庫,如下圖所示。

Firewall configuration diagram

重要

Azure Synapse 僅支援伺服器層級 IP 防火牆規則。 而不支援資料庫層級的 IP 防火牆規則。

伺服器層級 IP 防火牆規則

這些規則可讓用戶端存取整部伺服器,也就是受伺服器管理的所有資料庫。 這些規則儲存在 master 資料庫中。 伺服器層級IP防火牆規則的數目上限限制為伺服器256。 如果您已啟用 [允許 Azure 服務和資源存取此伺服器] 設定,則這會計為伺服器的單一防火牆規則。

您可以使用 Azure 入口網站、PowerShell 或 Transact-SQL 陳述式來設定伺服器層級 IP 防火牆規則。

注意

使用 Azure 入口網站 設定時,伺服器層級IP防火牆規則的最大數目限制為256。

  • 若要使用入口網站或 PowerShell,您必須是訂閱擁有者或訂閱參與者。
  • 若要使用 Transact-SQL,您必須以伺服器層級主體登入或 Microsoft Entra 系統管理員身分連線到 master 資料庫。 (伺服器層級 IP 防火牆規則必須先由擁有 Azure 層級權限的使用者建立。)

注意

根據預設,從 Azure 入口網站建立新的邏輯 SQL 伺服器時,[允許 Azure 服務和資源存取此伺服器] 設定會設為 [否]。

資料庫層級 IP 防火牆規則

資料庫層級 IP 防火牆規則可讓用戶端存取特定 (安全) 資料庫。 您可針對每個資料庫 (包括 master 資料庫) 建立這些規則,其會存放在個別的資料庫中。

  • 您可以僅針對 master 與使用者資料庫,藉由使用 Transact-SQL 陳述式來建立和管理資料庫層級 IP 防火牆規則,而且只能在設定第一個伺服器層級防火牆之後進行。
  • 如果您在資料庫層級 IP 防火牆規則中指定的 IP 位址範圍是在伺服器層級 IP 防火牆規則的範圍之外,只有具有資料庫層級範圍中 IP 位址的用戶端才可以存取資料庫。
  • 預設值為一個資料庫最多 256 個資料庫層級的 IP 防火牆規則。 如需設定資料庫層級 IP 防火牆規則的詳細資訊,請參閱本文稍後的範例,並參閱 sp_set_database_firewall_rule (Azure SQL Database)

如何設定防火牆規則的建議

建議您盡可能使用資料庫層級 IP 防火牆規則。 這種做法可增強安全性,並提升您資料庫的可攜性。 針對管理員使用伺服器層級 IP 防火牆規則。 當您有許多資料庫具有相同的存取需求,而且您不想個別設定每個資料庫時,也可以使用這些規則。

注意

如需可讓業務持續運作的可攜式資料庫資訊,請參閱災害復原的驗證需求

伺服器層級與資料庫層級 IP 防火牆規則

某個資料庫的使用者是否應該完全與另一個資料庫隔離?

如果「是」,請使用資料庫層級 IP 防火牆規則授與存取權。 此方法可避免使用伺服器層級 IP 防火牆規則,該規則允許透過防火牆存取所有資料庫。 這樣會使得您的防禦程度降低。

IP 位址的使用者是否需要存取所有資料庫?

如果「是」,使用伺服器層級 IP 防火牆規則會減少您必須設定 IP 防火牆規則的次數。

設定 IP 防火牆規則的人員或小組是否只能透過 Azure 入口網站、PowerShell 或 REST API 進行存取?

如果是,您必須使用伺服器層級 IP 防火牆規則。 資料庫層級 IP 防火牆規則只能透過 Transact-SQL 來設定。

設定 IP 防火牆規則的人員或小組是否無法具備資料庫層級的高層級權限?

如果是,請使用伺服器層級 IP 防火牆規則。 您至少需要資料庫層級的 CONTROL DATABASE 權限,才能透過 Transact-SQL 設定資料庫層級 IP 防火牆規則。

設定或稽核 IP 防火牆規則的人員或小組是否集中管理許多 (可能有數百個) 資料庫的 IP 防火牆規則?

在此情況下,最佳做法取決於您的需求和環境。 伺服器層級 IP 防火牆規則可能會比較容易設定,但是指令碼可以設定資料庫層級的規則。 即使您使用伺服器層級 IP 防火牆規則,還是可能需要稽核資料庫層級 IP 防火牆規則,以查看具備資料庫 CONTROL 權限的使用者是否已建立資料庫層級 IP 防火牆規則。

我是否可以混合使用伺服器層級和資料庫層級的 IP 防火牆規則?

是。 部分使用者 (例如管理員) 可能需要伺服器層級 IP 防火牆規則。 其他使用者 (例如資料庫應用程式的使用者) 可能需要資料庫層級 IP 防火牆規則。

從網際網路的連接

當電腦嘗試從網際網路連線到伺服器時,防火牆會先根據資料庫層級 IP 防火牆規則,檢查連線所要求之資料庫的來源 IP 位址。

  • 如果位址是在資料庫層級 IP 防火牆規則中指定的範圍內,則會將連線授與包含該規則的資料庫。
  • 如果位址不在資料庫層級 IP 防火牆規則的範圍內,防火牆就會檢查伺服器層級 IP 防火牆規則。 如果位址是在伺服器層級 IP 防火牆規則的範圍內,則會授與連線。 伺服器層級 IP 防火牆規則適用於伺服器管理的所有資料庫。
  • 如果位址不在任何資料庫層級或伺服器層級 IP 防火牆規則的範圍內,連線要求就會失敗。

注意

若要從您的本機電腦存取 Azure SQL Database,請確定您的網路和本機電腦上的防火牆允許 TCP 連接埠 1433 的傳出通訊。

從 Azure 內部連線

若要讓託管在 Azure 內的應用程式連線到您的 SQL Server,必須啟用 Azure 連線。 若要啟用 Azure 連線,必須有防火牆規則,其開始和結束 IP 位址設為 0.0.0.0。 此建議規則僅適用於 Azure SQL Database。

當來自 Azure 的應用程式嘗試連線至伺服器時,防火牆會藉由確認此防火牆規則是否存在,以檢查是否允許 Azure 連線。 這可以直接從 [Azure 入口網站] 窗格開啟,方法是在防火牆和虛擬網路設定中,將 [允許 Azure 服務和資源存取此伺服器] 切換至 ON 將設定切換為 [開啟] 時,會建立名為 AllowAllWindowsAzureIps的 IP 0.0.0.0 - 0.0.0.0 的輸入防火牆規則。 您可以在 master 資料庫sys.firewall_rules 檢視中檢視此規則。 如果您不是使用入口網站,請使用 PowerShell 或 Azure CLI 來建立防火牆規則,將開始和結束 IP 位址設為 0.0.0.0。

重要

此選項會設定防火牆,以允許所有來自 Azure 的連線,包括來自其他客戶訂閱的連線。 如果您選取此選項,請確定您的登入和使用者權限會限制為只有授權的使用者才能存取。

權限

若要能夠建立及管理 Azure SQL Server 的 IP 防火牆規則,您必須:

建立和管理 IP 防火牆規則

您可以藉由使用 Azure 入口網站,或藉由使用 Azure PowerShellAzure CLI 或 Azure REST API,以程式設計方式建立第一個伺服器層級防火牆設定。 您可以使用這些方法或 Transact-SQL 來建立和管理其他伺服器層級 IP 防火牆規則。

重要

只能使用 Transact-SQL 來建立和管理資料庫層級 IP 防火牆規則。

為提升效能,系統會暫時在資料庫層級快取伺服器層級 IP 防火牆規則。 若應重新整理快取,請參閱 DBCC FLUSHAUTHCACHE

提示

您可以使用資料庫稽核來稽核伺服器層級和資料庫層級防火牆變更。

使用 Azure 入口網站來管理伺服器層級 IP 防火牆規則

若要在 Azure 入口網站中設定伺服器層級 IP 防火牆規則,請前往您的資料庫或伺服器的概觀頁面。

提示

如需教學課程,請參閱使用 Azure 入口網站建立資料庫

從資料庫概觀頁面

  1. 若要從資料庫概觀頁面設定伺服器層級 IP 防火牆規則,請選取工作列上的 [設定伺服器防火牆],如下圖所示。

    Screenshot of the set server firewall setting in the Azure portal.

    伺服器的 [網路] 頁面隨即開啟。

  2. 在 [防火牆規則] 區段中新增規則,以新增您使用的電腦 IP 位址,然後選取 [儲存]。 系統便會為目前的 IP 位址建立伺服器層級 IP 防火牆規則。

    Screenshot shows the Networking page where you can set the server-level IP firewall rules.

從伺服器概觀頁面

伺服器的概觀頁面隨即開啟。 其中會顯示完整伺服器名稱 (例如 mynewserver20170403.database.windows.net),並提供進一步的設定選項。

  1. 若要從這個頁面設定伺服器層級規則,請從左側的 [設定] 功能表,選取 [網路]。

  2. 在 [防火牆規則] 區段中新增規則,以新增您使用的電腦 IP 位址,然後選取 [儲存]。 系統便會為目前的 IP 位址建立伺服器層級 IP 防火牆規則。

使用 Transact-SQL 來管理 IP 防火牆規則

目錄檢視或預存程序 層級 描述
sys.firewall_rules 伺服器 顯示目前的伺服器層級 IP 防火牆規則
sp_set_firewall_rule 伺服器 建立或更新伺服器層級 IP 防火牆規則
sp_delete_firewall_rule 伺服器 移除伺服器層級 IP 防火牆規則
sys.database_firewall_rules 資料庫 顯示目前的資料庫層級 IP 防火牆規則
sp_set_database_firewall_rule 資料庫 建立或更新資料庫層級 IP 防火牆規則
sp_delete_database_firewall_rule 資料庫 移除資料庫層級 IP 防火牆規則

下列範例會檢閱現有的規則、在 Contoso 伺服器上啟用 IP 位址範圍,以及刪除 IP 防火牆規則:

SELECT * FROM sys.firewall_rules ORDER BY name;

接下來,新增伺服器層級 IP 防火牆規則。

EXECUTE sp_set_firewall_rule @name = N'ContosoFirewallRule',
   @start_ip_address = '192.168.1.1', @end_ip_address = '192.168.1.10'

若要刪除伺服器層級 IP 防火牆規則,請執行 sp_delete_firewall_rule 預存程序。 下列範例會刪除名為 ContosoFirewallRule 的規則:

EXECUTE sp_delete_firewall_rule @name = N'ContosoFirewallRule'

使用 PowerShell 來管理伺服器層級 IP 防火牆規則

注意

本文使用 Azure Az PowerShell 模組,這是與 Azure 互動時建議使用的 PowerShell 模組。 若要開始使用 Az PowerShell 模組,請參閱安裝 Azure PowerShell。 若要瞭解如何遷移至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 遷移至 Az。

重要

Azure SQL Database 仍然支援 PowerShell Azure Resource Manager 模組,但所有開發目前都是適用於 Az.Sql 模組。 如需這些 Cmdlet,請參閱 AzureRM.Sql \(英文\)。 Az 和 AzureRm 模組中命令的引數本質上完全相同。

Cmdlet 層級 描述
Get-AzSqlServerFirewallRule 伺服器 返回目前的伺服器層級防火牆規則
New-AzSqlServerFirewallRule 伺服器 建立新的伺服器層級防火牆規則
Set-AzSqlServerFirewallRule 伺服器 更新現有伺服器層級防火牆規則的屬性
Remove-AzSqlServerFirewallRule 伺服器 移除伺服器層級防火牆規則

下列範例會使用 PowerShell 來設定伺服器層級 IP 防火牆規則:

New-AzSqlServerFirewallRule -ResourceGroupName "myResourceGroup" `
    -ServerName $servername `
    -FirewallRuleName "ContosoIPRange" -StartIpAddress "192.168.1.0" -EndIpAddress "192.168.1.255"

提示

針對 $servername 指定伺服器名稱,而不是完整的 DNS 名稱,例如指定 mysqldbserver,而非 mysqldbserver.database.windows.net

如需快速入門內容中的 PowerShell 範例,請參閱建立 DB - PowerShell 以及使用 PowerShell 建立單一資料庫並設定伺服器層級 IP 防火牆規則

使用 CLI 來管理伺服器層級 IP 防火牆規則

Cmdlet 層級 描述
az sql server firewall-rule create 伺服器 建立伺服器 IP 防火牆規則
az sql server firewall-rule list 伺服器 列出伺服器上的 IP 防火牆規則
az sql server firewall-rule show 伺服器 顯示 IP 防火牆規則的詳細資料
az sql server firewall-rule update 伺服器 更新 IP 防火牆規則
az sql server firewall-rule delete 伺服器 刪除 IP 防火牆規則

下列範例會使用 CLI 來設定伺服器層級 IP 防火牆規則:

az sql server firewall-rule create --resource-group myResourceGroup --server $servername \
-n ContosoIPRange --start-ip-address 192.168.1.0 --end-ip-address 192.168.1.255

提示

針對 $servername,請指定伺服器名稱,而不是完整 DNS 名稱。 例如,使用 mysqldbserver 而不是 mysqldbserver.database.windows.net

如需快速入門內容中的 CLI 範例,請參閱建立 DB - Azure CLI 以及使用 Azure CLI 建立單一資料庫並設定伺服器層級 IP 防火牆規則

針對 Azure Synapse Analytics,請參閱下列範例:

Cmdlet 層級 描述
az synapse workspace firewall-rule create 伺服器 建立防火牆規則
az synapse workspace firewall-rule delete 伺服器 刪除防火牆規則
az synapse workspace firewall-rule list 伺服器 列出所有防火牆規則
az synapse workspace firewall-rule show 伺服器 取得防火牆規則
az synapse workspace firewall-rule update 伺服器 更新防火牆規則
az synapse workspace firewall-rule wait 伺服器 將 CLI 置於等候狀態,直到符合防火牆規則的條件

下列範例會使用 CLI 在 Azure Synapse 中設定伺服器層級 IP 防火牆規則:

az synapse workspace firewall-rule create --name AllowAllWindowsAzureIps --workspace-name $workspacename --resource-group $resourcegroupname --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0

使用 REST API 來管理伺服器層級 IP 防火牆規則

API 層級 描述
列出防火牆規則 伺服器 顯示目前的伺服器層級 IP 防火牆規則
建立或更新防火牆規則 伺服器 建立或更新伺服器層級 IP 防火牆規則
刪除防火牆規則 伺服器 移除伺服器層級 IP 防火牆規則
取得防火牆規則 伺服器 取得伺服器層級 IP 防火牆規則

針對資料庫防火牆問題進行疑難排解

當存取 Azure SQL Database 未如預期般運作時,請考慮下列幾點。

  • 本機防火牆組態:

    在您的電腦可以存取 Azure SQL Database 之前,您可能需要在電腦上為 TCP 連接埠 1433 建立防火牆例外狀況。 若要在 Azure 雲端界限內建立連線,您可能必須開啟其他連接埠。 如需詳細資訊,請參閱針對 ADO.NET 4.5 及 Azure SQL Database 的 1433 以外的連接埠的〈SQL Database:外部與內部〉一節。

  • 網路位址轉譯:

    由於網路位址轉譯 (NAT),您的電腦用來連線至 Azure SQL Database 的 IP 位址,可能會不同於您電腦 IP 組態設定中顯示的 IP 位址。 若要檢視您的電腦用來連線至 Azure 的 IP 位址:

    1. 登入入口網站。
    2. 移至裝載資料庫的伺服器上的 [設定] 索引標籤。
    3. [目前的用戶端 IP 位址] 會顯示在 [允許的 IP 位址] 區段中。 為 [允許的 IP 位址] 選取 [新增],以允許此電腦存取伺服器。
  • 允許清單的變更尚未生效:

    Azure SQL Database 防火牆設定變更可能會延遲最多 5 分鐘才能生效。

  • 登入未獲授權,或使用不正確的密碼:

    如果登入沒有伺服器的權限或密碼不正確,連線至伺服器將會遭到拒絕。 建立防火牆設定只會讓用戶端有機會嘗試連線到您的伺服器。 用戶端仍然必須提供必要的安全性認證。 如需準備登入的詳細資訊,請參閱控制和授與資料庫存取權

  • 動態 IP 位址:

    如果您有使用動態 IP 位址的網際網路連線,並且在通過防火牆時遇到問題,請嘗試下列其中一個解決方案:

    • 洽詢網際網路服務提供者,要求他們提供為您存取伺服器的用戶端電腦指派的 IP 位址範圍。 將該 IP 位址範圍新增為 IP 防火牆規則。
    • 改為針對您的用戶端電腦取得靜態 IP 位址。 將 IP 位址新增為 IP 防火牆規則。

後續步驟