實作 Azure SQL Database 防火牆
例如,當您在 Azure SQL Database 或名為 mysqlserver 的 Azure Synapse Analytics 中建立新伺服器時,伺服器層級防火牆會封鎖伺服器的所有公用端點存取權(可在 mysqlserver.database.windows.net 存取)。 為了簡單起見, SQL Database 可用來參考 SQL Database 和 Azure Synapse Analytics。 本文 不適用於Azure SQL 受控實例。 如需網路設定的相關信息,請參閱 將您的應用程式連線到 Azure SQL 受控實例。
防火牆的運作方式
來自網際網路和 Azure 的連線嘗試必須先通過防火牆,才能到達您的伺服器或資料庫,如下圖所示。
這很重要
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防火牆規則,以查看具有資料庫建立資料庫層級IP防火牆規則 CONTROL 許可權的使用者。
我是否可以混合使用伺服器層級和資料庫層級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。 將設定切換至 ON 會建立 IP 0.0.0.0 - 0.0.0.0 名為 AllowAllWindowsAzureIps 的輸入防火牆規則。 可以在你的主資料庫 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 防火牆規則:
SQL
SELECT * FROM sys.firewall_rules ORDER BY name;
接下來,新增伺服器層級 IP 防火牆規則。
SQL
SELECT * FROM sys.firewall_rules ORDER BY name;
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:
SQL
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。
這很重要
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 防火牆規則:
PowerShell
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 伺服器防火牆規則創建 | 伺服器 | 建立伺服器 IP 防火牆規則 |
| az sql 伺服器 防火牆規則 列表 | 伺服器 | 列出伺服器上的 IP 防火牆規則 |
| az sql server 防火牆規則 顯示 | 伺服器 | 顯示 IP 防火牆規則的詳細資料 |
| az sql server 防火牆規則更新 | 伺服器 | 更新 IP 防火牆規則 |
| az sql server firewall-rule delete (刪除 SQL 伺服器的防火牆規則) | 伺服器 | 刪除 IP 防火牆規則 |
下列範例會使用 CLI 來設定伺服器層級 IP 防火牆規則:
Azure CLI
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 workspace firewall-rule delete | 伺服器 | 刪除防火牆規則 |
| az synapse 工作區防火牆規則清單 | 伺服器 | 列出所有防火牆規則 |
| az synapse workspace firewall-rule show | 伺服器 | 取得防火牆規則 |
| az synapse 工作區防火牆規則更新 | 伺服器 | 更新防火牆規則 |
| az synapse workspace firewall-rule wait | 伺服器 | 將 CLI 置於等候狀態,直到符合防火牆規則的條件 |
下列範例會使用 CLI 來設定 Azure Synapse 中的伺服器層級 IP 防火牆規則:
Azure CLI
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 防火牆規則
展開資料表
| 應用程式介面 | 層級 | 描述 |
|---|---|---|
| 列出防火牆規則 | 伺服器 | 顯示目前的伺服器層級 IP 防火牆規則 |
| 建立或更新防火牆規則 | 伺服器 | 建立或更新伺服器層級 IP 防火牆規則 |
| 刪除防火牆規則 | 伺服器 | 移除伺服器層級 IP 防火牆規則 |
| 取得防火牆規則 | 伺服器 | 取得伺服器層級 IP 防火牆規則 |
針對資料庫防火牆問題進行疑難排解
當存取 Azure SQL Database 未如預期般運作時,請考慮下列幾點。
本機防火牆設定:在您的計算機可以存取 Azure SQL Database 之前,您可能需要在計算機上建立 TCP 連接埠 1433 的防火牆例外狀況。 若要在 Azure 雲端界限內建立連線,您可能必須開啟其他連接埠。 如需詳細資訊,請參閱「SQL Database:ADO.NET 4.5 和 Azure SQL 資料庫的 1433 以外連接埠的「外部與內部」區段。
網路位址轉換:由於網路位址轉換(NAT),您的計算機用來連線到 Azure SQL Database 的 IP 位址可能會與電腦 IP 組態設定中的 IP 位址不同。 若要檢視您的電腦用來連線至 Azure 的 IP 位址:
- 登入入口網站。
- 前往承載資料庫的伺服器上的「設定」分頁。
- 目前的用戶端 IP 位址會顯示在 [允許的 IP 位址] 區段中。 針對 [允許的IP 位址] 選取 [新增],以允許這部計算機存取伺服器。
對允許清單所做的變更尚未生效:Azure SQL Database 防火牆設定的變更最多可能會延遲 5 分鐘才會生效。
登入未獲授權,或使用不正確的密碼:如果登入沒有伺服器的許可權或密碼不正確,則會拒絕與伺服器的連線。 建立防火牆設定只會讓用戶端有機會嘗試連線到您的伺服器。 用戶端仍然必須提供必要的安全性認證。 如需準備登入的詳細資訊,請參閱 控制及授與數據庫存取權。
動態IP位址:如果您有使用動態IP尋址的因特網聯機,而且無法通過防火牆,請嘗試下列其中一個解決方案:
- 洽詢網際網路服務提供者,要求他們提供為您存取伺服器的用戶端電腦指派的 IP 位址範圍。 將該 IP 位址範圍新增為 IP 防火牆規則。
- 改為針對您的用戶端電腦取得靜態 IP 位址。 將 IP 位址新增為 IP 防火牆規則。