啟用 Azure VM 上 SQL Server 的 Microsoft Entra 驗證

適用於:Azure VM 上的 SQL Server

本文章將教導您為 Azure 虛擬機器 (VM) 上的 SQL Server 啟用 Microsoft Entra ID (先前稱為 Azure Active Directory) 驗證。

概觀

從 SQL Server 2022 開始,您可以使用下列其中一種 Microsoft Entra 驗證方法連線至 Azure VM 上的 SQL Server:

  • 密碼可實現透過 Microsoft Entra 認證進行驗證
  • 與 MFA 通用:新增多重要素驗證
  • 整合會使用同盟提供者,例如 Active Directory 同盟服務 (ADFS) 來啟用單一登入 (SSO) 體驗
  • 服務主體可在 Azure 應用程式上進行驗證
  • 受控識別可在被指派有 Microsoft Entra 身分識別的應用程式上進行驗證

在您為 SQL Server 建立 Microsoft Entra 登入且使用者使用該登入進行連線時,SQL Server 將使用受控識別來查詢 Microsoft Graph。 為 Azure VM 上的 SQL Server 啟用 Microsoft Entra 驗證時,您需要提供 SQL Server 可用於與 Microsoft Entra ID 通訊的受控識別。 此受控識別需要具有查詢 Microsoft Graph 的權限。

在 Azure 中啟用資源的受控識別時,身分識別的安全性界限是其所連結的資源。 例如,對於 Azure 資源適用受控識別已啟用的虛擬機器而言,其安全性界限就是虛擬機器。 在該虛擬機器上執行的任何程式碼,都能呼叫受控識別端點與要求權杖。 在為 Azure VM 上的 SQL Server 啟用受控識別時,身分識別將連結至虛擬機器,因此安全性界限是虛擬機器。 使用支援受控識別的其他資源時,體驗很類似。 如需詳細資訊,請參閱受控識別常見問題

用於透過 Azure VM 上的 SQL Server 進行 Microsoft Entra 驗證的系統指派和使用者指派的受控識別提供下列優點:

  • 系統指派的受控識別提供簡化的設定流程。 由於受控識別與虛擬機器具有相同的存留期,因此在刪除虛擬機器時無需單獨刪除它。
  • 使用者指派的受控識別提供了可擴縮性,因為它可以連結至 Azure VM 上的多個 SQL Server 並用於 Microsoft Entra 驗證。

若要開始使用受控識別,請檢閱使用 Azure 入口網站設定受控識別

必要條件

若要在 SQL Server 啟用 Microsoft Entra 驗證,您需要下列必要條件:

授與權限

您選擇用於協助 SQL Server 與 Microsoft Entra ID 之間驗證的受控識別必須具有下列三個 Microsoft Graph 應用程式權限 (應用程式角色):User.Read.AllGroupMember.Read.AllApplication.Read.All

或者,將受控識別新增至 Microsoft Entra 目錄讀取者角色會授與足夠的權限。 將目錄讀取者角色指派給受控識別的另一種方式,是將目錄讀取者角色指派給 Microsoft Entra ID 中的群組。 然後,群組擁有者可以將虛擬機器受控識別新增為此群組的成員。 這最大限度地減少了 Microsoft Entra 全域系統管理員的參與,並將責任委派給群組擁有者。

將受控識別新增至角色

本章節說明如何將受控識別新增至 Microsoft Entra ID 中的目錄讀取者角色。 您必須擁有全域系統管理員權限,才能變更目錄讀取者角色指派。 如果您沒有足夠的權限,請與您的 Microsoft Entra 系統管理員合作,以依循下列步驟操作。

若要授與受控識別目錄讀取者角色,以依循下列步驟操作:

  1. 在 Azure 入口網站中開啟 Microsoft Entra ID 角色和系統管理員

  2. 在搜尋方塊中輸入 [目錄讀取者],然後選取 [目錄讀取者] 角色以開啟 [目錄讀取者 | 指派] 頁面:

    Azure 入口網站 [角色和系統管理員] 頁面的螢幕擷取畫面,搜尋並選取 [目錄讀取者] 角色。

  3. 在 [目錄讀取者 | 指派] 頁面,選取 [+ 新增指派] 以開啟 [新增指派] 頁面。

    Azure 入口網站 [目錄讀取者] 頁面的螢幕擷取畫面。

  4. 在 [新增指派] 頁面上,選擇 [選取成員] 底下的 [未選取成員],以開啟 [選取成員] 頁面。

    Azure 入口網站 [新增指派] 頁面的螢幕擷取畫面,其中已醒目提示 [未選取成員]。

  5. 在 [選取成員] 頁面上,搜尋您想要與 SQL Server VM 搭配使用的受控識別名稱,並將其新增至目錄讀取者角色。 針對系統指派的受控識別,搜尋 VM 的名稱。 使用 [選取] 以確認身分識別,然後返回 [新增指派] 頁面。

    搜尋 Azure 入口網站中要選取成員的螢幕擷取畫面。

  6. 確認您在 [選取成員] 下看到您選擇的身分識別,然後選取 [下一步]。

    Azure 入口網站中 [新增指派] 頁面的螢幕擷取畫面,其中已將 VM2 新增為指派。

  7. 確認您的指派類型已設定為 [使用中],並核取 [永久指派] 旁的方塊。 輸入商務理由,例如「將目錄讀取者角色權限新增至 VM2 系統指派的身分識別」,然後選取 [指派] 以儲存您的設定並返回 [目錄讀取者 | 工作分派] 頁面。

    Azure 入口網站中 [新增指派] 設定的螢幕擷取畫面。

  8. 在 [目錄讀取者 | 指派] 頁面,確認您在 [目錄讀取者] 底下看到您新增的身分識別。

    Azure 入口網站 [目錄讀取者] 頁面的螢幕擷取畫面,其中顯示已新增至角色的 VM 指派。

新增應用程式角色權限

您可以使用 Azure PowerShell 來將應用程式角色授與受控識別。 若要如此做,請執行下列步驟:

注意

自 2024 年 3 月 30 日起,Azure AD 和 MSOnline PowerShell 模組已被淘汰。 若要深入了解,請參閱淘汰更新。 在此日期之後,這些模組的支援僅限於 Microsoft Graph PowerShell SDK 和安全性修正的移轉協助。 已淘汰的模組將繼續在 2025 年 3 月 30 日運作。

建議移轉至 Microsoft Graph PowerShell,以與 Microsoft Entra ID (先前稱為 Azure AD) 互動。 如需常見的移轉問題,請參閱移轉常見問題注意:MSOnline 1.0.x 版可能會在 2024 年 6 月 30 日之後發生中斷。

  1. 搜尋 Microsoft Graph

    $AAD_SP = Get-AzureADServicePrincipal -Filter "DisplayName eq 'Microsoft Graph'"
    
  2. 擷取受控識別:

    $MSI = Get-AzureADServicePrincipal -Filter "DisplayName eq '<your managed identity display name>'"
    
  3. 為身分識別指派 User.Read.All 角色:

    $AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "User.Read.All"}
    New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId  -PrincipalId $MSI.ObjectId  
    -ResourceId $AAD_SP.ObjectId  -Id $AAD_AppRole.Id
    
  4. 為身分識別指派 GroupMember.Read.All 角色:

    $AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "GroupMember.Read.All"}  
    New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId  -PrincipalId $MSI.ObjectId  
    -ResourceId $AAD_SP.ObjectId  -Id $AAD_AppRole.Id 
    
  5. 為身分識別指派 Application.Read.All 角色:

    $AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "Application.Read.All"}  
    New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId  -PrincipalId $MSI.ObjectId  
    -ResourceId $AAD_SP.ObjectId  -Id $AAD_AppRole.Id 
    

您可以執行下列操作來驗證已指派給受控識別的權限:

  1. Azure 入口網站中,前往 Microsoft Entra ID
  2. 選擇 [企業應用程式],然後選取 [管理] 下的 [所有應用程式]
  3. Managed identities 篩選應用程式類型
  4. 選取受控識別,然後選擇 [安全性] 下的 [權限]。 您應該會看見下列權限:User.Read.AllGroupMember.Read.AllApplication.Read.All

啟用輸入通訊

為了讓 Microsoft Entra 驗證發揮作用,您需要下列項目:

  • 從 SQL Server 至 Microsoft Entra ID 和 Microsoft Graph 端點的輸出通訊。
  • 從 SQL 用戶端至 Microsoft Entra ID 的輸出通訊。

預設 Azure VM 組態允許與 Microsoft Graph 端點以及 Microsoft Entra ID 進行輸出通訊,但部分使用者選擇使用 OS 層級防火牆或 Azure VNet 網路安全性群組 (NSG) 來限制輸出通訊。

SQL Server VM 和任何 SQL 用戶端上的防火牆需要允許連接埠 80 和 443 上的輸出流量。

託管 SQL Server VM 之 VNet 的 Azure VNet NSG 規則應具有下列項目:

  • AzureActiveDirectory 的服務標籤。
  • 目的地連接埠範圍:80、443。
  • 將 [動作] 設定為 [允許]
  • 高優先順序 (這是低數字)。

啟用 Microsoft Entra 驗證

您可以使用 Azure 入口網站 或 Azure CLI,為 SQL Server VM 啟用 Microsoft Entra 驗證。

注意

啟用 Microsoft Entra 驗證之後,您可以依循本章節中的相同步驟操作,將設定變更為使用不同的受控識別。

若要為 SQL Server VM 啟用 Microsoft Entra 驗證,請依循下列步驟操作:

  1. 瀏覽至 Azure 入口網站中 SQL 虛擬機器資源

  2. 在 [安全性] 下選取 [安全性組態]

  3. 在 [Microsoft Entra 驗證] 下選擇 [啟用]

  4. 從下拉式清單中選擇 [受控識別類型],可為 [系統指派] 或 [使用者指派]。 如果您選擇使用者指派,請從顯示的 [使用者指派的受控識別] 下拉式清單中選取您想要用來驗證的身分識別,以在 Azure VM 上驗證 SQL Server。

    Azure 入口網站中 SQL VM 的安全性組態頁面螢幕擷取畫面,其中已選取 Microsoft Entra 驗證。

啟用 Microsoft Entra 驗證之後,您可以依循相同的步驟操作,以變更哪些受控識別可以向 SQL Server VM 進行驗證。

注意

錯誤 The selected managed identity does not have enough permissions for Microsoft Entra authentication 表示尚未將權限正確地指派給您選取的身分識別。 查看 [授與權限] 區段以指派適當的權限。

限制

請將下列限制列入考量條件:

  • 僅在使用 SQL IaaS 代理程式延伸模組註冊並部署至公用雲端的 Windows VM 上執行的 SQL Server 2022 支援 Microsoft Entra 驗證。 僅支援 SQL IaaS 代理程式延伸模組的支援案例,例如預設執行個體或單一具名執行個體。
  • 您選擇要驗證 SQL Server 的身分識別必須具有 Microsoft Entra ID 中的目錄讀取者角色,或下列三個 Microsoft Graph 應用程式權限 (應用程式角色):User.Read.AllGroupMember.Read.AllApplication.Read.All
  • 啟用 Microsoft Entra 驗證之後,便無法停用它。
  • 目前不支援使用 FIDO2 方法透過 Microsoft Entra 驗證向 Azure VM 上的 SQL Server 進行驗證。

下一步

檢閱 SQL Server 的安全性最佳作法。

如需在 Azure VM 中執行 SQL Server 的其他相關文章,請參閱<Azure 虛擬機器上的 SQL Server 概觀>(部分機器翻譯)。 如果您有 SQL Server 虛擬機器的相關問題,請參閱常見問題集

若要深入了解,請參閱此最佳作法系列的其他文章: