共用方式為


Azure SQL 資料庫和 Azure Synapse 的 IP 防火牆規則

適用於:Azure SQL DatabaseAzure Synapse Analytics

例如,當你在Azure SQL Database或Azure Synapse Analytics建立一台名為 mysqlserver 的新伺服器時,伺服器層級防火牆會阻擋所有對該伺服器公共端點的存取(該端點可於 mysqlserver.database.windows.net 存取)。 為了簡化起見,SQL Database同時指稱 SQL 資料庫與 Azure Synapse Analytics。 本文適用於Azure SQL Managed Instance。 關於網路設定的資訊,請參見 Connect 您的應用程式至 Azure SQL Managed Instance

注意

Microsoft Entra ID 過去稱為 Azure Active Directory(Azure AD)。

防火牆的運作方式

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

Azure SQL Database防火牆圖。

重要

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 服務與資源存取此伺服器設定為 No

資料庫層級 IP 防火牆規則

資料庫層級 IP 防火牆規則可讓用戶端存取特定 (安全) 資料庫。 你為每個資料庫(包括資料庫本身 master )建立規則,並儲存在各自的資料庫中。

  • 你只能透過 Transact-SQL 語句,並且在設定第一個伺服器層級防火牆後,才能為 master 和使用者資料庫建立和管理資料庫層級的 IP 防火牆規則。
  • 如果您在資料庫層級 IP 防火牆規則中指定的 IP 位址範圍是在伺服器層級 IP 防火牆規則的範圍之外,只有具有資料庫層級範圍中 IP 位址的用戶端才可以存取資料庫。
  • 預設值為一個資料庫最多 256 個資料庫層級的 IP 防火牆規則。 欲了解更多關於設定資料庫層級 IP 防火牆規則的資訊,請參閱本文後面的範例及 sp_set_database_firewall_rule (Azure SQL Database)

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

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

注意

關於業務持續性脈絡下的可攜式資料庫資訊,請參見 配置與管理地理還原或故障轉移Azure SQL Database安全。

伺服器層級與資料庫層級 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 伺服器,你需要啟用 Azure 連線。 為此,請建立一條防火牆規則,起始與結束 IP 位址設為 0.0.0.0。 此規則僅適用於 Azure SQL Database。

當 Azure 的應用程式嘗試連接伺服器時,防火牆會透過驗證此防火牆規則是否允許 Azure 連線。 此功能可直接從Azure入口網站窗格啟用,方法是在 Firewalls and Virtual Networks 設定中,將 Allow Azure Services and resources to access this server 切換至 ON。 將設定切換到 ON 會建立一個 IP 0.0.0.0 - 0.0.0.0 的入站防火牆規則,名為 AllowAllWindowsAzureIps。 規則可以在你的 master 資料庫 sys.firewall_rules 檢視中查看。 如果你沒有使用入口網站,請使用 PowerShell 或 Azure CLI 建立防火牆規則,起始和結束 IP 位址設為 0.0.0.0。

警告

啟用此選項可連接 all Azure 服務,包括其他客戶訂閱中運行的服務。 此規則不限制存取您的訂閱或資源群組——任何有外撥連接 Azure SQL Database 的 Azure 資源都可以連線。 啟用此設定時,請確保你的登入與使用者權限限制僅授權使用者存取。

以下 Azure 服務通常使用此規則來連接 Azure SQL Database:

  • Azure App Service and Azure Functions
  • Azure Data Factory
  • Azure Stream Analytics
  • Azure Logic Apps
  • Azure Power BI
  • Azure AI services

為了提升安全性,建議使用 虛擬網路服務端點私有端點 ,取代 AllowAllWindowsAzureIps 規則。 這些替代方案限制連線權限至特定子網或私有網路,而非允許所有 Azure IP 位址。

權限

要建立和管理 Azure SQL Server 的 IP 防火牆規則,你需要具備以下其中一個角色:

建立和管理 IP 防火牆規則

你可以用 Azure portal 建立第一個伺服器層級防火牆設定,或程式化使用 Azure PowerShellAzure CLI,或 Azure REST API。 你可以透過這些方法或 Transact-SQL 來建立和管理額外的伺服器層級 IP 防火牆規則。

重要

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

為提升效能,系統會暫時在資料庫層級快取伺服器層級 IP 防火牆規則。 要刷新快取,請參見 DBCC FLUSHAUTHCACHE。

提示

你可以使用 Auditing for Azure SQL Database 和 Azure Synapse Analytics來審核伺服器層級和資料庫層級的防火牆變更。

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

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

從資料庫總覽頁面

  1. 若要從資料庫總覽頁面設定伺服器層級的 IP 防火牆規則,請在工具列中選擇 「設定伺服器防火牆 」,如下圖所示。

    Azure入口網站伺服器防火牆設定的截圖。

    伺服器的 網路 頁面打開。

  2. 防火牆規則 區新增規則,輸入你使用的電腦的 IP 位址,然後選擇 儲存。 系統便會為目前的 IP 位址建立伺服器層級 IP 防火牆規則。

    截圖顯示的是網路頁面,可以設定伺服器層級的 IP 防火牆規則。

從伺服器概觀頁面

伺服器的概觀頁面隨即開啟。 它會顯示完全限定的伺服器名稱(例如 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 模組,請參見 Install Azure PowerShell。 想了解如何遷移到 Az PowerShell 模組,請參考 Migrate Azure PowerShell from AzureRM to Az

重要

PowerShell Azure Resource Manager(AzureRM)模組於 2024 年 2 月 29 日被棄用。 所有未來的開發都應該使用 Az.Sql 模組。 建議使用者從 AzureRM 遷移至 Az PowerShell 模組,以確保持續支援和更新。 不再維護或支援 AzureRM 模組。 Az PowerShell 模組和 AzureRM 模組中命令的自變數基本上完全相同。 如需其相容性的詳細資訊,請參閱 新的 Az PowerShell 模組簡介

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 範例,請參考 Azure PowerShell範例中的 Azure SQL Database使用 PowerShell 建立單一資料庫並設定伺服器層級防火牆規則

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

cmdlet 層級 描述
az sql server firewall-rule create(建立 SQL 伺服器防火牆規則) 伺服器 建立伺服器 IP 防火牆規則
az SQL Server firewall-rule list 伺服器 列出伺服器上的 IP 防火牆規則
az SQL Server Firewall-rule Show 伺服器 顯示 IP 防火牆規則的詳細資料
更新 az sql server 防火牆規則 伺服器 更新 IP 防火牆規則
az sql server firewall-rule delete(刪除 SQL Server 防火牆規則) 伺服器 刪除 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 範例,請參考 Azure CLI 範例中的 Azure SQL Database建立單一資料庫並使用 Azure CLI 配置防火牆規則。

關於 Azure Synapse Analytics,請參考以下範例:

cmdlet 層級 描述
az synapse workspace firewall-rule create 伺服器 建立防火牆規則
az synapse workspace firewall-rule delete 伺服器 刪除防火牆規則
az synapse workspace firewall-rule list(列出 Synapse 工作區的防火牆規則) 伺服器 列出所有防火牆規則
az synapse workspace firewall-rule show 伺服器 取得防火牆規則
az synapse workspace firewall-rule update 伺服器 更新防火牆規則
az synapse workspace firewall-rule wait 等待命令,用於監控 Synapse 工作區防火牆規則狀態。 伺服器 將 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 防火牆規則

瞭解防火牆更新的延遲

除非資料庫包含且沒有故障轉移夥伴,否則伺服器驗證模型對於安全性設定的所有變更都會延遲 5 分鐘。 在沒有故障轉移夥伴的情況下,對封裝資料庫所做的變更是立即生效的。 對於具有備援夥伴的封閉資料庫,主資料庫上的每個安全性更新都會立即完成,但輔助資料庫最多可能需要 5 分鐘才能反映變更。

下表描述根據資料庫類型和故障轉移組態變更的安全性設定延遲:

驗證模型 已設定故障轉移 安全性設定變更的延遲 潛伏實例
伺服器驗證 是的 5 分鐘 所有資料庫
伺服器驗證 5 分鐘 所有資料庫
內含資料庫 是的 5 分鐘 輔助資料庫
內含資料庫 沒有 沒有

手動重新整理防火牆規則

如果您希望看到防火牆規則比通常的五分鐘延遲更快更新,您可以手動重新整理防火牆規則。 登入需要更新規則的資料庫實例,並執行 DBCC FLUSHAUTHCACHE。 這會導致資料庫實例排清其本機快取並重新整理防火牆規則。

DBCC FLUSHAUTHCACHE[;]

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

請考慮以下幾點,當存取 Azure SQL Database 的行為不符合你的預期時。

  • 本地防火牆設定:

    在你的電腦能存取 Azure SQL Database 之前,你可能需要先為 TCP 埠 1433 建立防火牆例外。 要在 Azure 雲端邊界內建立連線,可能需要開啟額外的埠口。 欲了解更多資訊,請參閱 Ports beyond 1433 中的「SQL 資料庫:外部與內部」章節,適用於 ADO.NET 4.5

  • 網路地址轉換:

    由於網路位址轉換(NAT),你的電腦用來連接 Azure SQL Database 的 IP 位址,可能會和你電腦 IP 設定中的 IP 位址不同。 要查看你電腦用來連接 Azure 的 IP 位址:

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

    Azure SQL Database防火牆設定的變更生效可能需要最多五分鐘的延遲。

  • 登入未被授權,或是使用了錯誤的密碼:

    如果登入沒有伺服器的權限或密碼不正確,連線至伺服器將會遭到拒絕。 建立防火牆設定只會讓客戶 端有機會嘗試 連接你的伺服器。 用戶端仍然必須提供必要的安全性認證。 欲了解更多關於準備登入的資訊,請參閱 授權資料庫存取 SQL Database、SQL Managed Instance 及 Azure Synapse Analytics

  • 動態 IP 位址:

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

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