對 Azure SQL Database 中的伺服器使用虛擬網路服務端點和規則
適用於:
Azure SQL Database
Azure Synapse Analytics
虛擬網路規則是一個防火牆安全性功能,可控制適用於 Azure SQL Database 中資料庫和彈性集區的伺服器,或是適用於 Azure Synapse Analytics 中專用 SQL 集區 (之前稱為 SQL DW) 的伺服器,是否會接受虛擬網路中特定子網路所傳來的通訊。 本文說明為何虛擬網路規則有時是最佳選項,可讓您安全地在 SQL Database 和 Azure Synapse Analytics 中與您的資料庫進行通訊。
注意
本文適用於 SQL Database 和 Azure Synapse Analytics。 簡單來說,資料庫一詞是指 SQL Database 和 Azure Synapse Analytics 中的資料庫。 同樣地,只要提到伺服器,也都是指裝載 SQL Database 和 Azure Synapse Analytics 的邏輯 SQL 伺服器。
若要建立虛擬網路規則,必須先有虛擬網路服務端點規則可供參考。
建立虛擬網路規則
如果只是建立虛擬網路規則,您可以直接跳到本文稍後的步驟和說明。
虛擬網路規則的詳細資料
本節描述虛擬網路規則的一些詳細資料。
只有一個地理區域
每個虛擬網路服務端點只套用至一個 Azure 區域。 端點無法讓其他區域接受來自子網路的通訊。
任何虛擬網路規則只以套用其基礎端點的區域為對象。
伺服器層級,非資料庫層級
每個虛擬網路規則會套用至整個伺服器,而不只是伺服器上的一個特定資料庫。 換句話說,虛擬網路規則是在伺服器層級套用,而不是資料庫層級。
相反地,IP 規則可以在任一個層級套用。
安全性管理角色
有一組獨立的安全性角色負責管理虛擬網路服務端點。 下列每個角色都需要採取動作:
- 網路系統管理員 (網路參與者 角色): 開啟端點。
- 資料庫管理員 (SQL Server 參與者 角色): 更新存取控制清單 (ACL) 以將指定的子網路新增至伺服器。
Azure RBAC 替代方案
「網路管理員」和「資料庫管理員」角色的能力已超過管理虛擬網路規則所需。 只需要其中一部分能力。
在 Azure 中,您可以選擇使用角色型存取控制 (RBAC) 來建立單一自訂安全性角色,而且只給予一部分必要的能力。 您可以使用自訂角色,而不是涉及網路系統管理員或資料庫管理員。如果您將使用者新增至自訂角色,而不是將使用者新增至其他兩個主要系統管理員角色,則安全性暴露的介面區會較低。
注意
在某些情況下,SQL Database 中的資料庫和虛擬網路子網位於不同的訂用帳戶中。 在這些情況下,您必須確保下列設定:
- 兩個訂用帳戶必須位於相同的 Azure Active Directory (Azure AD) 租用戶中。
- 使用者具備啟動作業的必要權限,例如啟用服務端點,以及將虛擬網路子網路新增至指定的伺服器。
- 這兩個訂用帳戶都必須註冊 Microsoft.Sql 提供者。
限制
對於 SQL Database,虛擬網路規則功能具有下列限制:
- 在針對 SQL Database 的防火牆中,每個虛擬網路規則都會參考一個子網路。 裝載所有這些參考子網路的地理區域,必須和裝載資料庫的地理區域相同。
- 在任何虛擬網路中,每部伺服器最多可以有 128 個 ACL 項目。
- 虛擬網路規則只套用至 Azure Resource Manager 虛擬網路,而不是傳統部署模型網路。
- 開啟 SQL Database 的虛擬網路服務端點也會啟用適用於 MySQL 的 Azure 資料庫和適用於 PostgreSQL 的 Azure 資料庫端點。 當端點設定為 ON 時,嘗試從端點連接到適用於 MySQL 的 Azure 資料庫和適用於 PostgreSQL 的 Azure 資料庫實例可能會失敗。
- 根本原因是適用於 MySQL 的 Azure 資料庫和適用於 PostgreSQL 的 Azure 資料庫可能未設定虛擬網路規則。 您必須為適用於 MySQL 和 PostgreSQL 的 Azure 資料庫設定虛擬網路規則。
- 若要在已設定私人端點的 SQL 邏輯伺服器上定義虛擬網路防火牆規則,請將 [拒絕公用網路存取] 設定為 [否]。
- 在防火牆上,IP 位址範圍會套用到下列網路項目,但虛擬網路規則不這麼做:
- 站對站 (S2S) 虛擬私人網路 (VPN)
- 透過 Azure ExpressRoute 的內部部署
使用服務端點時的注意事項
當您使用 SQL Database 的服務端點時,請檢閱下列注意事項:
- 必須輸出至 Azure SQL Database 公用 IP。 必須針對 SQL Database IP 開啟網路安全性群組 (NSG),才能夠進行連線。 為了完成此操作,您可以使用適用於 SQL Database 的 NSG 服務標籤。
ExpressRoute
如果您使用來自內部部署的 ExpressRoute 進行公用對等互連或 Microsoft 對等互連,您將必須識別所使用的 NAT IP 位址。 在公用對等互連中,每個 Expressroute 線路預設都會使用兩個 NAT IP 位址,而這兩個位址會在流量進入 Microsoft Azure 網路骨幹時套用至 Azure 服務流量。 若為 Microsoft 對等互連,所使用的 NAT IP 位址是由客戶或服務提供者提供。 若要允許存取您的服務資源,就必須在資源 IP 防火牆設定中允許這些公用 IP 位址。 若要尋找您的公用對等互連 ExpressRoute 線路 IP 位址,請透過 Azure 入口網站開啟有 ExpressRoute 的支援票證。 若要深入瞭解適用於 ExpressRoute 公用和 Microsoft 對等互連的 NAT,請參閱 Azure 公用對等互連的 NAT 需求。
若要允許從您的線路與 SQL Database 通訊,您必須為 NAT 的公用 IP 位址建立 IP 網路規則。
使用虛擬網路服務端點搭配 Azure 儲存體的影響
Azure 儲存體已實作功能,可讓您限制連線至 Azure 儲存體帳戶的連線。 如果您選擇使用這項功能,並使用 SQL Database 正在使用的 Azure 儲存體帳戶,可能會遇到問題。 接下來是受此影響的 SQL Database 和 Azure Synapse Analytics 功能清單和討論。
Azure Synapse Analytics PolyBase 和 COPY 陳述式
PolyBase 和 COPY 陳述式通常用於將資料從 Azure 儲存體帳戶載入 Azure Synapse Analytics,已進行高輸送量資料擷取。 如果所要從中載入資料的 Azure 儲存體帳戶僅能存取一組虛擬網路子網,則當您對儲存體帳戶使用 PolyBase 和 COPY 陳述式時,即會中斷連線。 若要透過搭配使用 COPY 和 PolyBase 以及 Azure Synapse Analytics (安全連線至虛擬網路的 Azure 儲存體) 來啟用匯入和匯出案例,請遵循本節中的步驟。
必要條件
- 使用此指南安裝 Azure PowerShell。
- 如果您有一般用途 v1 或 Azure Blob 儲存體帳戶,您必須遵循升級至一般用途 v2 儲存體帳戶中的步驟,先升級至一般用途 v2。
- 您必須開啟 Azure 儲存體帳戶 [防火牆與虛擬網路] 設定功能表下方的 [允許信任的 Microsoft 服務存取此儲存體帳戶]。 啟用此設定可讓 PolyBase 和 COPY 陳述式使用增強式驗證來連線到儲存體帳戶,其中網路流量會留在 Azure 骨幹上。 如需詳細資訊,請參閱此指南。
重要
SQL Database 仍然支援 PowerShell Azure Resource Manager 模組,但所有未來的開發都是針對 Az.Sql 模組。 AzureRM 模組在至少 2020 年 12 月之前都還會持續收到 Bug 修正。 Az 模組和 AzureRm 模組中命令的引數本質上完全相同。 如需其相容性的詳細資訊,請參閱新的 Azure PowerShell Az 模組簡介。
步驟
如果您有獨立的專用 SQL 集區,請使用 PowerShell 向 Azure AD 註冊您的 SQL 伺服器:
Connect-AzAccount Select-AzSubscription -SubscriptionId <subscriptionId> Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-SQL-servername -AssignIdentityAzure Synapse Analytics 工作區內的專用 SQL 集區不需要此步驟。 系統指派的受控識別 (工作區的 SA-MI) 是 Synapse 系統管理員角色的成員,因此在工作區專用的 SQL 集區上擁有較高的權限。
依照建立儲存體帳戶中的步驟,建立一般用途 v2 儲存體帳戶。
- 如果您有一般用途 v1 或 Azure Blob 儲存體帳戶,您必須遵循升級至一般用途 v2 儲存體帳戶中的步驟,先升級至一般用途 v2。
- 針對 Azure Data Lake Storage Gen2 的已知問題,請參閱Azure Data Lake Storage Gen2 的已知問題。
在您的儲存體帳戶頁面上,選取 [存取控制 (IAM)]。
選取 [新增]>[新增角色指派],開啟 [新增角色指派] 頁面。
指派下列角色。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色。
設定 值 角色 儲存體 Blob 資料參與者 存取權指派對象 使用者、群組或服務主體 成員 裝載您專用 SQL 集區的伺服器或工作區,您已將其向 Azure AD 註冊 
注意
只有在儲存體帳戶上具有「擁有者」權限的成員才能執行此步驟。 如需各種 Azure 內建角色,請參閱 Azure 內建角色。
若要啟用 Azure 儲存體帳戶的 Polybase 連線:
建立資料庫主要金鑰 (如果先前尚未建立)。
CREATE MASTER KEY [ENCRYPTION BY PASSWORD = 'somepassword'];使用 IDENTITY = 'Managed Service Identity' 建立資料庫範圍的認證。
CREATE DATABASE SCOPED CREDENTIAL msi_cred WITH IDENTITY = 'Managed Service Identity';不需要使用 Azure 儲存體存取金鑰指定 SECRET,因為此機制會在幕後使用受控身分識別。 Azure Synapse Analytics 工作區內的專用 SQL 集區不需要此步驟。 系統指派的受控識別 (工作區的 SA-MI) 是 Synapse 系統管理員角色的成員,因此在工作區專用的 SQL 集區上擁有較高的權限。
PolyBase 連線的 IDENTITY 名稱必須為 'Managed Service Identity',才能搭配使用安全連至虛擬網路的 Azure 儲存體帳戶。
使用
abfss://配置建立外部資料來源,以使用 PolyBase 連接至您的一般用途 v2 儲存體帳戶。CREATE EXTERNAL DATA SOURCE ext_datasource_with_abfss WITH (TYPE = hadoop, LOCATION = 'abfss://myfile@mystorageaccount.dfs.core.windows.net', CREDENTIAL = msi_cred);- 如果您已有與一般用途 v1 或 Blob 儲存體帳戶相關聯的外部資料表,請先卸除這些外部資料表。 然後卸除對應的外部資料來源。 接下來,使用連接至一般用途 v2 儲存體帳戶的
abfss://配置來建立外部資料來源,如先前所示。 然後使用這個新的外部資料來源重新建立所有外部資料表。 您可以使用 [產生和發佈指令碼精靈],輕鬆地為所有的外部資料表產生建立指令碼。 - 如需
abfss://配置的詳細資訊,請參閱使用 Azure Data Lake Storage Gen2 URI。 - 如需 T-SQL 命令的詳細資訊,請參閱 CREATE EXTERNAL DATA SOURCE。
- 如果您已有與一般用途 v1 或 Blob 儲存體帳戶相關聯的外部資料表,請先卸除這些外部資料表。 然後卸除對應的外部資料來源。 接下來,使用連接至一般用途 v2 儲存體帳戶的
以一般方式使用外部資料表查詢。
SQL Database Blob 稽核
Azure SQL 稽核可以將 SQL 的 audit 記錄寫入您自己的儲存體帳戶。 如果此儲存體帳戶使用虛擬網路服務端點功能,請參閱如何將 audit 寫入至 VNet 和防火牆後方的儲存體帳戶。
將虛擬網路防火牆規則新增到您的 Azure SQL 伺服器
先前,在尚未增強這項功能之前,您必須先開啟虛擬網路服務端點,才可以在防火牆中實作即時的虛擬網路規則。 對於 SQL Database 中的資料庫,與指定虛擬網路子網路相關的端點。 從 2018 年 1 月起,您不再需要這樣做,只需設定 IgnoreMissingVNetServiceEndpoint 旗標即可。 現在,您可以將虛擬網路防火牆規則新增到您的伺服器,而不需要開啟虛擬網路服務端點。
只是設定防火牆規則不能協助您保護伺服器。 您也必須開啟虛擬網路服務端點,安全性才會生效。 當您開啟服務端點時,您的虛擬網路子網路會停機,直到完成關閉到開啟的轉換。 這段停機時間特別會在大型虛擬網路的環境中發生。 您可以使用 IgnoreMissingVNetServiceEndpoint 旗標來減少或排除在轉換期間的停機時間。
您可以使用 PowerShell 設定 IgnoreMissingVNetServiceEndpoint 旗標。 如需詳細資訊,請參閱使用 PowerShell 建立 SQL Database 的虛擬網路服務端點和規則。
注意
如需 Azure Synapse Analytics 中類似的指示,請參閱 Azure Synapse Analytics IP 防火牆規則
使用 Azure 入口網站建立虛擬網路規則
本節說明如何使用 Azure 入口網站在 SQL Database 的資料庫中建立虛擬網路規則。 此規則會指示資料庫接受已標記為虛擬網路服務端點的特定子網路通訊。
注意
如果您想要將服務端點新增至伺服器的虛擬網路防火牆規則,請先確認已為子網路開啟服務端點。
如果未開啟子網路的服務端點,入口網站將會要求您加以啟用。 在您新增規則的相同窗格視窗上,選取 [啟用] 按鈕。
必要條件
您必須已有以 SQL Database 相關特定虛擬網路服務端點類型名稱所標記的子網路。
- 相關的端點類型名稱是 Microsoft.Sql。
- 如果您的子網路可能未標記類型名稱,請參閱確認您的子網路是端點。
Azure 入口網站步驟
登入 Azure 入口網站。
搜尋並選取 [SQL 伺服器],然後選取您的伺服器。 在 [安全性] 下方,選取 [防火牆與虛擬網路]。
設定允許 Azure 服務和資源存取此伺服器為否。
重要
如果讓此控制項保持 [開啟],則您的伺服器會接受來自 Azure 界限內任何子網路的通訊。 這是源自某個 IP 位址的通訊,這些 IP 位址可辨識為 Azure 資料中心定義範圍內的其中一個 IP 位址。 就安全性觀點而言,讓此控制項保持 [開啟] 可能導致超量存取。 Microsoft Azure 虛擬網路服務端點功能可搭配 SQL Database 的虛擬網路規則功能使用,以縮小安全性介面區。
在 [虛擬網路] 區段中選取 [+ 新增現有的虛擬網路]。
在新的 [建立/更新] 窗格中,將您的 Azure 資源名稱填入方塊中。
提示
必須包含子網路的正確位址首碼。 您可以在入口網站中找到位址首碼值。 移至 [所有資源]>[所有類型]>[虛擬網路]。 篩選條件會顯示您的虛擬網路。 選取您的虛擬網路,然後選取 [子網路]。 [位址範圍] 資料行具有您需要的位址首碼。
選取窗格底端附近的 [確定] 按鈕。
在 [防火牆] 窗格上查看產生的虛擬網路規則。
注意
規則有下列狀態:
- 就緒:指出您起始的作業已成功。
- 失敗:指出您起始的作業已失敗。
- 刪除:只適用於刪除作業,指出規則已被刪除,且不再套用。
- 進行中:指出正在進行作業。 作業處於此狀態時,會套用舊規則。
使用 PowerShell 建立虛擬網路規則
指令碼也可以使用 PowerShell Cmdlet New-AzSqlServerVirtualNetworkRule 或 az network vnet create 來建立虛擬網路規則。 如需詳細資訊,請參閱使用 PowerShell 建立 SQL Database 的虛擬網路服務端點和規則。
使用 REST API 建立虛擬網路規則
SQL 虛擬網路動作的 PowerShell cmdlet 會在內部呼叫 REST API。 您可以直接呼叫 REST API。 如需詳細資訊,請參閱虛擬網路規則:作業。
針對錯誤 40914 和 40615 進行疑難排解
連線錯誤 40914 與「虛擬網路規則」有關,這些規則會在 Azure 入口網站中的 [防火牆] 窗格中指定。 與錯誤 40615 類似,但其中與防火牆上的「IP 位址規則」相關。
錯誤 40914
訊息文字:「無法開啟登入所要求的伺服器 '[server-name]'。 用戶端不允許存取伺服器。」
錯誤說明:用戶端所在的子網路含有虛擬網路伺服器端點。 但伺服器沒有虛擬網路規則,以將與資料庫通訊的權限授與子網路。
錯誤解決方法:在 Azure 入口網站的 [防火牆] 窗格上,使用虛擬網路規則控制項為子網路新增虛擬網路規則。
錯誤 40615
訊息文字:「無法開啟登入所要求的伺服器 '{0}'。 不允許 IP 位址為 {1} 的用戶端存取伺服器。」
錯誤描述:用戶端嘗試從未授權連線至伺服器的 IP 位址進行連線。 伺服器防火牆沒有其 IP 位址規則,以允許用戶端從指定的 IP 位址通訊至資料庫。
錯誤解決方式:輸入用戶端的 IP 位址作為 IP 規則。 使用 Azure 入口網站中的 [防火牆] 窗格來執行此步驟。
相關文章
後續步驟
- 使用 PowerShell 建立 SQL Database 的虛擬網路服務端點以及虛擬網路規則
- 虛擬網路規則:作業 (使用 REST API)



