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 ID 先前稱為 Azure Active Directory (Azure AD)。
防火牆的運作方式
來自網際網路和 Azure 的連線嘗試必須先通過防火牆,才能到達您的伺服器或資料庫,如下圖所示。
重要
Azure Synapse 僅支援伺服器層級 IP 防火牆規則。 而不支援資料庫層級的 IP 防火牆規則。
伺服器層級 IP 防火牆規則
這些規則可讓用戶端存取整部伺服器,也就是受伺服器管理的所有資料庫。 這些規則儲存在 master 資料庫中。 伺服器層級 IP 防火牆規則的最大數量限制為每個伺服器 256 個。 如果您已啟用 [允許 Azure 服務和資源存取此伺服器] 設定,則這會計為伺服器的單一防火牆規則。
您可以使用 Azure 入口網站、PowerShell 或 Transact-SQL 陳述式來設定伺服器層級 IP 防火牆規則。
注意
使用 Azure 入口網站設定時,伺服器層級 IP 防火牆規則的數量上限為 256 個。
- 若要使用入口網站或 PowerShell,您必須是訂閱擁有者或訂閱參與者。
- 若要使用 SQL 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 入口網站窗格開啟。 將設定切換為 [開啟] 時,會建立名為 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 防火牆規則,您必須:
- 為 SQL Server 參與者角色
- 為 SQL 安全性管理員角色
- 包含 Azure SQL Server 資源的擁有者
建立和管理 IP 防火牆規則
您可以藉由使用 Azure 入口網站,或藉由使用 Azure PowerShell、Azure CLI 或 Azure REST API,以程式設計方式建立第一個伺服器層級防火牆設定。 您可以使用這些方法或 Transact-SQL 來建立和管理其他伺服器層級 IP 防火牆規則。
重要
只能使用 Transact-SQL 來建立和管理資料庫層級 IP 防火牆規則。
為提升效能,系統會暫時在資料庫層級快取伺服器層級 IP 防火牆規則。 若應重新整理快取,請參閱 DBCC FLUSHAUTHCACHE。
提示
您可以使用資料庫稽核來稽核伺服器層級和資料庫層級防火牆變更。
使用 Azure 入口網站來管理伺服器層級 IP 防火牆規則
若要在 Azure 入口網站中設定伺服器層級 IP 防火牆規則,請前往您的資料庫或伺服器的概觀頁面。
提示
如需教學課程,請參閱使用 Azure 入口網站建立資料庫。
從資料庫概觀頁面
若要從資料庫概觀頁面設定伺服器層級 IP 防火牆規則,請選取工作列上的 [設定伺服器防火牆],如下圖所示。
伺服器的 [網路] 頁面隨即開啟。
在 [防火牆規則] 區段中新增規則,以新增您使用的電腦 IP 位址,然後選取 [儲存]。 系統便會為目前的 IP 位址建立伺服器層級 IP 防火牆規則。
從伺服器概觀頁面
伺服器的概觀頁面隨即開啟。 其中會顯示完整伺服器名稱 (例如 mynewserver20170403.database.windows.net),並提供進一步的設定選項。
若要從這個頁面設定伺服器層級規則,請從左側的 [設定] 功能表,選取 [網路]。
在 [防火牆規則] 區段中新增規則,以新增您使用的電腦 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 工作區防火牆規則建立 | 伺服器 | 建立防火牆規則 |
az synapse 工作區防火牆規則刪除 | 伺服器 | 刪除防火牆規則 |
az synapse 工作區防火牆規則清單 | 伺服器 | 列出所有防火牆規則 |
az synapse 工作區防火牆規則顯示 | 伺服器 | 取得防火牆規則 |
az synapse 工作區防火牆規則更新 | 伺服器 | 更新防火牆規則 |
az 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 防火牆規則 |
針對資料庫防火牆問題進行疑難排解
當存取 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 位址:
- 登入入口網站。
- 移至裝載資料庫的伺服器上的 [設定] 索引標籤。
- [目前的用戶端 IP 位址] 會顯示在 [允許的 IP 位址] 區段中。 為 [允許的 IP 位址] 選取 [新增],以允許此電腦存取伺服器。
允許清單的變更尚未生效:
Azure SQL Database 防火牆設定變更可能會延遲最多 5 分鐘才能生效。
登入未獲授權,或使用不正確的密碼:
如果登入沒有伺服器的權限或密碼不正確,連線至伺服器將會遭到拒絕。 建立防火牆設定只會讓用戶端有機會嘗試連線到您的伺服器。 用戶端仍然必須提供必要的安全性認證。 如需準備登入的詳細資訊,請參閱控制和授與資料庫存取權。
動態 IP 位址:
如果您有使用動態 IP 位址的網際網路連線,並且在通過防火牆時遇到問題,請嘗試下列其中一個解決方案:
- 洽詢網際網路服務提供者,要求他們提供為您存取伺服器的用戶端電腦指派的 IP 位址範圍。 將該 IP 位址範圍新增為 IP 防火牆規則。
- 改為針對您的用戶端電腦取得靜態 IP 位址。 將 IP 位址新增為 IP 防火牆規則。
後續步驟
- 確認您的公司網路環境允許從 Azure 資料中心使用的計算 IP 位址範圍 (包括 SQL 範圍) 的輸入通訊。 您可能必須將這些 IP 位址新增至允許清單。 請參閱 Microsoft Azure 資料中心 IP 範圍。
- 請參閱我們的快速入門,了解如何在 Azure SQL Database 中建立單一資料庫。
- 如需透過開放原始碼或協力廠商應用程式連線到 Azure SQL Database 中資料庫的說明,請參閱 Azure SQL Database 的用戶端快速入門程式碼範例。
- 如需您可能需要開啟之其他連接埠的詳細資訊,請參閱針對 ADO.NET 4.5 和 SQL Database 的 1433 以外的連接埠的〈SQL Database:外部與內部〉一節
- 如需 Azure SQL Database 安全性的概觀,請參閱保護您的資料庫。