共用方式為


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

適用於:Azure VM 上的 SQL Server

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

Note

您可以為 未註冊 的 SQL Server 執行個體設定 Microsoft Entra 驗證,例如當您在相同的 VM 上有多個 SQL Server 執行個體時。

Overview

從 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 虛擬機上的多個 SQL Server 實例,並用於 Microsoft Entra 認證。

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

Prerequisites

若要在 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 將應用程式角色授與受控識別。 若要如此做,請執行下列步驟:

Note

自 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

    Connect-MgGraph -Scopes "AppRoleAssignment.ReadWrite.All" -TenantId "<tenant id>"
    
  2. 擷取受控識別:

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

    $AAD_AppRole = $Graph_SP.AppRoles | Where-Object {$_.Value -eq "User.Read.All"}  
    New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $MSI.Id -BodyParameter @{principalId=$MSI.Id; resourceId=$Graph_SP.Id; appRoleId=$AAD_AppRole.Id}
    
  4. 為身分識別指派 GroupMember.Read.All 角色:

    $AAD_AppRole = $Graph_SP.AppRoles | Where-Object {$_.Value -eq "GroupMember.Read.All"}  
    New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $MSI.Id -BodyParameter @{principalId=$MSI.Id; resourceId=$Graph_SP.Id; appRoleId=$AAD_AppRole.Id}
    
  5. 為身分識別指派 Application.Read.All 角色:

    $AAD_AppRole = $Graph_SP.AppRoles | Where-Object {$_.Value -eq "Application.Read.All"}  
    New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $MSI.Id -BodyParameter @{principalId=$MSI.Id; resourceId=$Graph_SP.Id; appRoleId=$AAD_AppRole.Id}
    

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

  1. Azure 入口網站中,前往 Microsoft Entra ID
  2. 選擇 Enterprise applications (企業應用程式),然後選取 [Manage] 底下的 [All applications]。
  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 進行外發通訊,但部分使用者會選擇使用作業系統層級防火牆或 Azure 網路安全群組(NSG)來限制外傳通訊。

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

為你 SQL Server VM 所設的虛擬網路,Azure 虛擬網路的 NSG 規則應該包含以下內容:

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

為已註冊的實例啟用Microsoft Entra 驗證

當你用 SQL IaaS Agent 擴充功能註冊你的 SQL Server 實例時,你可以透過 Azure 入口網站、Azure CLI 或 PowerShell 為已註冊實例啟用 Microsoft Entra 認證。 只有在已註冊的 SQL Server 實例上,才支援使用 Azure 入口網站或 Azure CLI 來管理您的實例。

Note

啟用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 進行驗證。

Note

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

為未註冊的實例啟用Microsoft Entra 驗證

如果您的 SQL Server 實例未向 SQL IaaS 代理程式延伸模組註冊,例如當您在同一部 VM 上有多個 SQL Server 實例時,您可以使用 PowerShell 啟用Microsoft Entra 驗證。

您可以針對特定未註冊的實例,或針對 VM 上的所有實例啟用Microsoft Entra 驗證。

Note

若要在 Azure VM 上的 SQL Server 上搭配未註冊的實例使用 Microsoft Entra 驗證,您必須至少有一個實例向 SQL IaaS 代理程式延伸模組註冊。

使用 Set-AzVMExtension -ExtensionName "SqlIaasExtension" 命令為 SQL Server 實例啟用 Microsoft Entra 驗證時,請考慮下列事項:

  • 只有當CheckPermissions參數設定為true時,才會檢查受管理識別的許可權。
  • 指定識別 ClientID 參數的用戶端識別碼,以使用 使用者指派的受控識別。 當 參數是空的 ClientID 時,會使用 系統指派的受控識別
  • 在參數中 EnableForGivenInstances 提供執行個體清單,以針對特定未註冊的執行個體啟用 Microsoft Entra 驗證。 否則,請使用 EnableForAllInstances 該參數啟用 Microsoft Entra 驗證,讓虛擬機上所有未註冊的實例都能使用。

下列範例會使用 系統指派的身分識別,針對 VM 上的所有執行個體啟用 Microsoft Entra 驗證:

Set-AzVMExtension -ExtensionName "SqlIaasExtension" -ResourceGroupName $resourceGroupName -VMName $sqlVMName -Publisher "Microsoft.SqlServer.Management" -ExtensionType "SqlIaaSAgent" -TypeHandlerVersion 2.0 -Location $region -SettingString '{"ServerConfigurationsManagementSettings": {"AADAuthenticationSettings": {"ClientId":"", "EnableForAllInstances":true, "CheckPermissions":true}},"DeploymentTokenSettings":{"DeploymentToken":12345678}}'

下列範例會使用 使用者指派的身分識別,為特定未註冊的執行個體啟用 Microsoft Entra 驗證:

Set-AzVMExtension -ExtensionName "SqlIaasExtension" -ResourceGroupName $resourceGroupName -VMName $sqlVMName -Publisher "Microsoft.SqlServer.Management" -ExtensionType "SqlIaaSAgent" -TypeHandlerVersion 2.0 -Location $region -SettingString '{"ServerConfigurationsManagementSettings": {"AADAuthenticationSettings": {"ClientId":$clientId, "EnableForGivenInstances":["MSSQLSERVER","MSSQLSERVER01"], "CheckPermissions":true}},"DeploymentTokenSettings":{"DeploymentToken":12345678}}'

建立帳號和使用者

請遵循 Microsoft Entra 教學 課程中的步驟,建立受控識別的登入和使用者。

連接到您的實例

請遵循 Microsoft Entra 教學課程中的指示,使用 Microsoft Entra 驗證連線到您的 SQL Server 實例。

Limitations

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

  • Microsoft只有在已向 SQL IaaS 代理程式擴充功能註冊的 Windows VM 上執行的 SQL Server 2022 才支援 Entra 驗證,部署至任何雲端。
  • 在 Azure 入口網站中管理Microsoft Entra 驗證僅適用於 SQL IaaS 代理程式擴充功能所支援的實例,例如預設實例或單一具名實例。 請使用 Azure CLI 或 PowerShell 管理那些未經 SQL IaaS 代理程式擴充功能註冊的 SQL Server VM 上 Microsoft Entra 驗證的其他實例。
  • 不支援在故障轉移叢集實例中使用 Microsoft Entra 驗證。
  • 您選擇向 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 虛擬機器的相關問題,請參閱常見問題集

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