對 Azure SQL Database 中的伺服器使用虛擬網路服務端點和規則

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

虛擬網路規則是防火牆安全性功能,可控制 Azure SQL 資料庫 中的資料庫和彈性集區伺服器,或 Azure Synapse Analytics專用 SQL 集區(先前稱為 SQL DW)資料庫的伺服器是否接受從虛擬網路中特定子網傳送的通訊。 本文說明為什麼虛擬網路規則有時是安全允許在 SQL 資料庫 和 Azure Synapse Analytics 中與資料庫通訊的最佳選項。

注意

本文同時適用於 SQL 資料庫 和 Azure Synapse Analytics。 為了簡單起見,資料庫一詞是指 SQL 資料庫 和 Azure Synapse Analytics 中的兩個資料庫。 同樣地,伺服器的任何參考是指裝載 SQL 資料庫 和 Azure Synapse Analytics 的邏輯伺服器

若要建立虛擬網路規則,必須先 有虛擬網路服務端點 ,規則才能參考。

注意

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

建立虛擬網路規則

如果您想要只建立虛擬網路規則,您可以直接跳到本文稍後的步驟和說明

虛擬網路規則的詳細數據

本節說明虛擬網路規則的數個詳細數據。

只有一個地理區域

每個虛擬網路服務端點僅適用於一個 Azure 區域。 端點不會讓其他區域接受來自子網的通訊。

任何虛擬網路規則都受限於其基礎端點適用的區域。

伺服器層級,而非資料庫層級

每個虛擬網路規則都會套用至整個伺服器,而不只是套用至伺服器上的一個特定資料庫。 換句話說,虛擬網路規則會套用在伺服器層級,而不是在資料庫層級套用。

相反地,IP 規則可以在任一層級套用。

安全性管理角色

虛擬網路服務端點管理中的安全性角色會分開。 下列每個角色都需要採取動作:

  • 網路 管理員(網路參與者角色):開啟端點。
  • 資料庫 管理員 (SQL Server 參與者角色):更新存取控制清單 (ACL) 以將指定的子網新增至伺服器。

Azure RBAC 替代專案

網路 管理員 和資料庫 管理員 的角色具有比管理虛擬網路規則所需的更多功能。 只需要其功能的子集。

您可以選擇在 Azure 中使用 角色型存取控制 (RBAC) 來建立只有必要功能子集的單一自定義角色。 您可以使用自定義角色,而不是牽涉到網路 管理員 或資料庫 管理員。如果您將使用者新增至自定義角色,而不是將使用者新增至其他兩個主要系統管理員角色,則安全性暴露的介面區較低。

注意

在某些情況下,SQL 資料庫 中的資料庫和虛擬網路子網位於不同的訂用帳戶中。 在這些情況下,您必須確定下列設定:

  • 這兩個訂用帳戶都必須位於相同的 Microsoft Entra 租使用者中。
  • 使用者具有起始作業所需的許可權,例如啟用服務端點,並將虛擬網路子網新增至指定的伺服器。
  • 這兩個訂用帳戶都必須註冊 Microsoft.Sql 提供者。

限制

針對 SQL 資料庫,虛擬網路規則功能具有下列限制:

  • 在 SQL 資料庫 中資料庫的防火牆中,每個虛擬網路規則都會參考子網。 所有這些參考的子網都必須裝載於裝載資料庫的相同地理區域中。
  • 每部伺服器最多可有 128 個 ACL 專案供任何虛擬網路使用。
  • 虛擬網路規則僅適用於 Azure Resource Manager 虛擬網路,不適用於 傳統部署模型 網路。
  • 開啟虛擬網路服務端點以 SQL 資料庫 也會啟用 適用於 MySQL 的 Azure 資料庫 和 適用於 PostgreSQL 的 Azure 資料庫 的端點。 當端點設定為 ON 時,嘗試從端點連線到您的 適用於 MySQL 的 Azure 資料庫 或 適用於 PostgreSQL 的 Azure 資料庫 實例可能會失敗。
    • 根本原因是 適用於 MySQL 的 Azure 資料庫 和 適用於 PostgreSQL 的 Azure 資料庫 可能未設定虛擬網路規則。 您必須為 適用於 MySQL 的 Azure 資料庫 和 適用於 PostgreSQL 的 Azure 資料庫 設定虛擬網路規則。
    • 若要在已使用私人端點設定的 SQL 邏輯伺服器上定義虛擬網路防火牆規則,請將 [拒絕公用網路存取] 設定[否]。
  • 在防火牆上,IP 位址範圍會套用至下列網路專案,但虛擬網路規則不會:

使用服務端點時的考慮

當您使用服務端點進行 SQL 資料庫 時,請檢閱下列考慮:

  • 需要輸出至 Azure SQL 資料庫 公用 IP。 網路安全組 (NSG) 必須開啟以 SQL 資料庫IP來允許連線。 您可以使用 NSG 服務標籤進行 SQL 資料庫。

ExpressRoute

如果您使用 來自內部部署的 ExpressRoute 進行公用對等互連或 Microsoft 對等互連,您必須識別所使用的 NAT IP 位址。 針對公用對等互連,每個 ExpressRoute 線路預設會在流量進入 Microsoft Azure 網路骨幹時,使用兩個套用至 Azure 服務流量的 NAT IP 位址。 針對 Microsoft 對等互連,所使用的 NAT IP 位址是由客戶或服務提供者提供。 若要允許存取您的服務資源,您必須在資源 IP 防火牆設定中允許這些公用 IP 位址。 若要尋找公用對等互連 ExpressRoute 線路 IP 位址,請透過 Azure 入口網站 開啟 ExpressRoute 的支援票證。 若要深入瞭解 ExpressRoute 公用和 Microsoft 對等互連的 NAT,請參閱 Azure 公用對等互連的 NAT 需求。

若要允許從線路到 SQL 資料庫 的通訊,您必須為 NAT 的公用 IP 位址建立 IP 網路規則。

使用虛擬網路服務端點搭配 Azure 儲存體的影響

Azure 儲存體已實作功能,可讓您限制連線至 Azure 儲存體帳戶的連線。 如果您選擇將此功能與 SQL 資料庫 使用的 Azure 儲存體 帳戶搭配使用,您可以遇到問題。 接下來是受此影響之 SQL 資料庫 和 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。 如需詳細資訊,請參閱安裝 Azure PowerShell 模組
  • 如果您有一般用途 v1 或 Azure Blob 儲存體 帳戶,您必須先遵循升級至一般用途 v2 儲存器帳戶中的步驟,升級至一般用途 v2。
  • 您必須在 [Azure 儲存體 帳戶防火牆和虛擬網络設定] 功能表下開啟 [允許信任 Microsoft 服務 存取此記憶體帳戶。 啟用此設定可讓 PolyBase 和 COPY 語句使用強式驗證連線到記憶體帳戶,而網路流量會保留在 Azure 骨幹上。 如需詳細資訊,請參閱 本指南

重要

Azure SQL Database 仍然支援 PowerShell Azure Resource Manager 模組,但所有未來的開發都是針對 Az.Sql 模組。 AzureRM 模組在至少 2020 年 12 月之前都還會持續收到 Bug 修正。 Az 模組和 AzureRm 模組中命令的引數本質上完全相同。 如需其相容性的詳細資訊,請參閱新的 Azure PowerShell Az 模組簡介

步驟

  1. 如果您有獨立的專用 SQL 集區(先前稱為 SQL DW),請使用 PowerShell 向 Microsoft Entra ID 註冊 SQL 伺服器:

    Connect-AzAccount
    Select-AzSubscription -SubscriptionId <subscriptionId>
    Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-SQL-servername -AssignIdentity
    

    Azure Synapse Analytics 工作區內的專用 SQL 集區不需要此步驟。 系統指派的工作區受控識別 (SA-MI) 是 Synapse 管理員角色的成員,因此在工作區的專用 SQL 集區上有較高的權限。

  2. 遵循建立記憶體帳戶中的步驟,建立一般用途 v2 儲存體 帳戶

    • 如果您有一般用途 v1 或 Blob 儲存體 帳戶,您必須先依照升級至一般用途 v2 儲存器帳戶中的步驟升級至 v2
    • 如需 Azure Data Lake 儲存體 Gen2 的已知問題,請參閱 Azure Data Lake 儲存體 Gen2 的已知問題。
  3. 在您的記憶體帳戶頁面上,選取 [訪問控制][IAM]。

  4. 選取 [新增]> [新增角色指派],開啟 [新增角色指派] 頁面。

  5. 指派下列角色。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色

    設定
    角色 儲存體 Blob 資料參與者
    存取權指派對象 使用者、群組或服務主體
    成員 裝載您已向 Microsoft Entra 識別子註冊的專用 SQL 集區的伺服器或工作區

    Screenshot that shows Add role assignment page in Azure portal.

    注意

    只有具有記憶體帳戶擁有者許可權的成員才能執行此步驟。 如需各種 Azure 內建角色,請參閱 Azure 內建角色

  6. 若要啟用與 Azure 儲存體 帳戶的PolyBase連線:

    1. 如果您先前尚未建立資料庫 主要金鑰,請建立資料庫主要金鑰

      CREATE MASTER KEY [ENCRYPTION BY PASSWORD = 'somepassword'];
      
    2. 使用 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 集區上有較高的權限。

      • IDENTITY 名稱必須是 「受控服務識別」,PolyBase 連線才能使用保護至虛擬網路的 Azure 儲存體 帳戶。

    3. 使用配置建立外部數據源, 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 儲存體 Gen2 URI
      • 如需 T-SQL 命令的詳細資訊,請參閱 CREATE EXTERNAL DATA SOURCE
    4. 使用 外部數據表以正常方式查詢。

SQL 資料庫 Blob 稽核

Azure SQL 稽核可以將 SQL 稽核記錄寫入您自己的記憶體帳戶。 如果此記憶體帳戶使用虛擬網路服務端點功能,請參閱如何將 稽核寫入 VNet 和防火牆後方的記憶體帳戶。

將虛擬網路防火牆規則新增至您的伺服器

很久以前,在增強此功能之前,您必須先開啟虛擬網路服務端點,才能在防火牆中實作即時虛擬網路規則。 端點會將指定的虛擬網路子網與 SQL 資料庫 中的資料庫相關聯。 自 2018 年 1 月起,您可以藉由設定 IgnoreMissingVNetServiceEndpoint 旗 標來規避這項需求。 現在,您可以將虛擬網路防火牆規則新增至伺服器,而不需開啟虛擬網路服務端點。

僅設定防火牆規則並不會協助保護伺服器。 您也必須開啟虛擬網路服務端點,安全性才會生效。 當您開啟服務端點時,您的虛擬網路子網會經歷停機,直到完成從關閉到開啟的轉換為止。 在大型虛擬網路的內容中,這段時間的停機時間尤其如此。 您可以使用 IgnoreMissingVNetServiceEndpoint 旗 標來減少或消除轉換期間的停機時間。

您可以使用 PowerShell 來設定 IgnoreMissingVNetServiceEndpoint 旗 標。 如需詳細資訊,請參閱PowerShell來建立虛擬網路服務端點和 SQL 資料庫 規則。

注意

如需 Azure Synapse Analytics 中的類似指示,請參閱 Azure Synapse Analytics IP 防火牆規則

使用 Azure 入口網站 建立虛擬網路規則

本節說明如何使用 Azure 入口網站,在 SQL 資料庫 中在您的資料庫中建立虛擬網路規則。 此規則會告知資料庫接受已標記為 虛擬網路服務端點之特定子網的通訊。

注意

如果您想要將服務端點新增至伺服器的虛擬網路防火牆規則,請先確定子網的服務端點已開啟。

如果子網的服務端點未開啟,入口網站會要求您啟用它們。 選取您新增規則的相同窗格上的 [ 啟用 ] 按鈕。

必要條件

您必須已經有已標記與 SQL 資料庫 相關的特定虛擬網路服務端點類型名稱的子網。

  • 相關的端點類型名稱為 Microsoft.Sql
  • 如果您的子網可能未以類型名稱標記,請參閱 確認您的子網是端點

Azure 入口網站步驟

  1. 登入 Azure 入口網站

  2. 搜尋並選取 [SQL Server],然後選取您的伺服器。 在 [安全性] 底下,選取 [網络]。

  3. 在 [ 公用存取 ] 索引卷標下,確定 [公用網络存取 ] 已設定為 [選取網络],否則 會隱藏 [虛擬網络 設定]。 在 [虛擬網络] 區段中,選取 [+ 新增現有的虛擬網络]。

    Screenshot that shows logical server properties for Networking.

  4. 在新的 [建立/更新] 窗格中,填入您的 Azure 資源名稱方塊。

    提示

    您必須包含子網的正確地址前綴。 您可以在 入口網站中找到 [位址前置字碼 ] 值。 移至 [所有資源>] [所有類型>虛擬網络]。 篩選會顯示您的虛擬網路。 選取您的虛擬網路,然後選取 [ 子網]。 ADDRESS RANGE 資料行具有您需要的地址前綴。

    Screenshot that shows filling in boxes for the new rule.

  5. 請參閱 [防火牆] 窗格上產生的虛擬網路規則。

    Screenshot that shows the new rule on the Firewall pane.

  6. 將 [允許 Azure 服務和資源存取此伺服器] 設定為 []。

    重要

    如果您保留 [允許 Azure 服務和資源存取此伺服器 ] 已核取,您的伺服器會接受來自 Azure 界限內任何子網的通訊。 這是源自其中一個IP位址的通訊,這些IP位址會辨識為針對 Azure 資料中心定義的範圍內。 從安全性觀點來看,讓控件保持啟用可能過度存取。 Microsoft Azure 虛擬網絡 服務端點功能會與 SQL 資料庫 的虛擬網路規則功能協調,以減少您的安全性介面區。

  7. 選取窗格底部附近的 [ 確定 ] 按鈕。

注意

下列狀態或狀態適用於規則:

  • 就緒:表示您起始的作業已成功。
  • 失敗:表示您起始的作業失敗。
  • 已刪除:僅適用於刪除作業,並指出規則已刪除且不再適用。
  • InProgress:表示作業正在進行中。 作業處於此狀態時,會套用舊規則。

使用 PowerShell 建立虛擬網路規則

腳本也可以使用 PowerShell Cmdlet New-AzSqlServerVirtualNetworkRuleaz network vnet create 來建立虛擬網路規則。 如需詳細資訊,請參閱PowerShell來建立虛擬網路服務端點和 SQL 資料庫 規則。

使用 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 入口網站 中的 [防火牆] 窗格來執行此步驟。

下一步