由 Azure Arc 启用的 SQL Server 托管身份(预览版)

适用于: SQL Server 2025 (17.x) 预览版

本文介绍如何为 Azure Arc 启用的 SQL Server 配置托管标识。

SQL Server 2025 (17.x) 预览版包括对 Windows 上的 SQL Server 的托管标识支持。 使用托管标识通过 Microsoft Entra 身份验证与 Azure 中的资源进行交互。

注释

使用托管标识结合 SQL Server 2025 目前处于 预览版阶段。

概述

SQL Server 2025 (17.x) 预览版引入了 对 Microsoft Entra 托管标识的支持。 使用托管标识向 Azure 服务进行身份验证,而无需管理凭据。 托管标识由 Azure 自动管理,可用于向支持 Microsoft Entra 身份验证的任何服务进行身份验证。 使用 SQL Server 2025 (17.x) 预览版,可以使用托管标识对入站连接进行身份验证,以及对到 Azure 服务的出站连接进行身份验证。

将 SQL Server 实例连接到 Azure Arc 时,系统分配的托管标识会自动为 SQL Server 主机名创建。 创建托管标识后,必须通过更新注册表将标识与 SQL Server 实例和 Microsoft Entra 租户 ID 相关联。

将托管标识与 Azure Arc 启用的 SQL Server 配合使用时,请考虑以下事项:

  • 托管标识在 Azure Arc 服务器级别分配。
  • 仅支持系统自动分配的托管标识。
  • SQL Server 使用此 Azure Arc 服务器级托管标识作为 主要托管标识
  • SQL Server 可以在 inbound 和/或 outbound 连接中使用此主托管标识。
    • Inbound connections 是连接到 SQL Server 的登录名和用户。 也可以使用 SQL Server 2022 中提供的应用注册来实现入站连接。
    • Outbound connections 是与 Azure 资源的 SQL Server 连接,例如备份到 URL 或连接到 Azure Key Vault。
  • 应用注册 无法 使 SQL Server 建立出站连接。 出站连接需要为 SQL Server 分配一个主要的托管标识。

先决条件

在 Azure Arc 启用的 SQL Server 中使用托管标识之前,请确保满足以下先决条件:

启用主托管标识

如果已将适用于 SQL Server 的 Azure 扩展安装到服务器,可以直接从 Azure 门户为 SQL Server 实例启用主托管标识。 还可以通过更新注册表手动启用主托管标识,但应谨慎行事。

若要在 Azure 门户中启用主要托管标识,请执行以下步骤:

  1. 转到 Azure 门户中由 Azure Arc 启用的 SQL Server 资源。

  2. “设置”下,选择 Microsoft Entra ID 和 Purview 以打开 Microsoft Entra ID 和 Purview 页面。

    注释

    如果未看到 “启用Microsoft Entra ID 身份验证 选项,请确保 SQL Server 实例已连接到 Azure Arc,并且已安装最新的 SQL 扩展。

  3. Microsoft Entra ID 和 Purview 页上,选中 “使用主托管标识 ”旁边的框,然后使用 “保存” 应用配置:

    Azure 门户中Microsoft Entra 选项的屏幕截图。

向应用程序授予对标识的权限

系统分配的托管标识(使用已启用 Arc 的计算机名称)必须具有以下 Microsoft Graph 应用程序权限(应用角色):User.Read.AllGroupMember.Read.AllApplication.Read.All

可以使用 PowerShell 向托管标识授予所需的权限。 或者,可以 创建可分配角色的组。 创建组后,将 目录读取者 角色分配给该组,并将已启用 Arc 的计算机的所有系统分配托管标识添加到该组。

以下 PowerShell 脚本向托管标识授予所需的权限:

# Update these variables to match your Azure & Arc machine setup
$tenantID = '<Enter-Your-Azure-Tenant-Id>'
$managedIdentityName = '<Enter-Your-Arc-HostMachine-Name>'

# Install and connect to AzureAD
try {
    Install-Module -Name AzureAD -Force -Scope CurrentUser -ErrorAction Stop
    Import-Module AzureAD
    Connect-AzureAD -TenantId $tenantID
    Write-Output "Connected to AzureAD successfully."
} catch {
    Write-Error "Failed to install or connect to AzureAD: $_"
    return
}

# Get Microsoft Graph API service principal
$graphAppId = '00000003-0000-0000-c000-000000000000'
$graphSP = Get-AzureADServicePrincipal -Filter "appId eq '$graphAppId'"
if (-not $graphSP) {
    Write-Error "Microsoft Graph service principal not found."
    return
}

# Get the managed identity
$managedIdentity = Get-AzureADServicePrincipal -SearchString $managedIdentityName | Where-Object { $_.DisplayName -eq $managedIdentityName }

if (-not $managedIdentity) {
    Write-Error "Managed identity '$managedIdentityName' not found."
    return
}

# Define roles to assign
$requiredRoles = @(
    "User.Read.All",
    "GroupMember.Read.All",
    "Application.Read.All"
)

# Assign roles
foreach ($roleValue in $requiredRoles) {
    $appRole = $graphSP.AppRoles | Where-Object { $_.Value -eq $roleValue -and $_.AllowedMemberTypes -contains "Application" }
    if ($appRole) {
        try {
            New-AzureADServiceAppRoleAssignment `
                -ObjectId $managedIdentity.ObjectId `
                -PrincipalId $managedIdentity.ObjectId `
                -ResourceId $graphSP.ObjectId `
                -Id $appRole.Id
            Write-Output "Successfully assigned role '$roleValue' to '$managedIdentityName'."
        } catch {
            Write-Warning "Failed to assign role '$roleValue': $_"
        }
    } else {
        Write-Warning "Role '$roleValue' not found in Microsoft Graph AppRoles."
    }
}

创建登录名和用户

按照 Microsoft Entra 教程 中的步骤为托管标识创建登录名和用户。

局限性

将托管标识与 SQL Server 2025 配合使用时,请考虑以下限制:

  • Microsoft Entra 身份验证仅支持在 Windows Server 上运行的已启用 Arc 功能的 SQL Server 2025。
  • 不支持对故障转移群集实例使用 Microsoft Entra 身份验证。
  • 你选择对 SQL Server 进行身份验证的标识须具有 Microsoft Entra ID 中的“目录读取者”角色或以下三个 Microsoft Graph 应用程序权限(应用角色):User.Read.AllGroupMember.Read.AllApplication.Read.All
  • 启用Microsoft Entra 身份验证后,不建议禁用。 通过删除注册表项强制禁用Microsoft Entra 身份验证可能会导致 SQL Server 2025 出现不可预知的行为。
  • 目前不支持使用 FIDO2 方法 通过 Microsoft Entra 身份验证向 Arc 计算机上的 SQL Server 进行身份验证。