由 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(16.x)开始,也可以使用 应用注册来实现入站连接。
    • Outbound connections 是与 Azure 资源的 SQL Server 连接,例如备份到 URL 或连接到 Azure Key Vault。
  • 应用注册无法使 SQL Server 建立出站连接。 出站连接需要为 SQL Server 分配一个主要的托管标识。
  • 对于 SQL Server 2025 及更高版本,建议使用基于托管标识的Microsoft Entra 设置,如本文所述。 或者,您可以配置一个应用注册用于 SQL Server 2025。

先决条件

在 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 应用程序权限(应用程序角色):

可以使用 PowerShell 向托管标识授予所需的权限。 或者,可以 创建可分配角色的组。 创建组后,为组分配目录读取者角色,或者分配 User.Read.AllGroupMember.Read.AllApplication.Read.All权限,然后将已启用 Azure Arc 的计算机的所有系统分配托管标识添加到该组中。 不建议在生产环境中使用 目录读取器 角色。

以下 PowerShell 脚本向托管标识授予所需的权限。 请确保此脚本在 PowerShell 7.5 或更高版本上运行,并 Microsoft.Graph 已安装模块 2.28 或更高版本。

# Set your Azure tenant and managed identity name
$tenantID = '<Enter-Your-Azure-Tenant-Id>'
$managedIdentityName = '<Enter-Your-Arc-HostMachine-Name>'

# Connect to Microsoft Graph
try {
    Connect-MgGraph -TenantId $tenantID -ErrorAction Stop
    Write-Output "Connected to Microsoft Graph successfully."
}
catch {
    Write-Error "Failed to connect to Microsoft Graph: $_"
    return
}

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

# Get the managed identity service principal
$managedIdentity = Get-MgServicePrincipal -Filter "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 using scoped syntax
foreach ($roleValue in $requiredRoles) {
    $appRole = $graphSP.AppRoles | Where-Object {
        $_.Value -eq $roleValue -and $_.AllowedMemberTypes -contains "Application"
    }

    if ($appRole) {
        try {
            New-MgServicePrincipalAppRoleAssignment   -ServicePrincipalId $managedIdentity.Id `
                -PrincipalId $managedIdentity.Id `
                -ResourceId $graphSP.Id `
                -AppRoleId $appRole.Id `
                -ErrorAction Stop

            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 身份验证的托管标识设置仅受已启用 Azure Arc 的 SQL Server 2025(在 Windows Server 上运行)的支持。
  • SQL Server 需要访问 Azure 公有云才能使用 Microsoft Entra 身份验证
  • 不支持对故障转移群集实例使用 Microsoft Entra 身份验证。
  • 启用Microsoft Entra 身份验证后,不建议禁用。 通过删除注册表项强制禁用Microsoft Entra 身份验证可能会导致 SQL Server 2025 出现不可预知的行为。
  • 目前不支持使用 FIDO2 方法 通过 Microsoft Entra 身份验证向 Arc 计算机上的 SQL Server 进行身份验证。
  • OPENROWSET BULK 操作还可以读取令牌文件夹 C:\ProgramData\AzureConnectedMachineAgent\Tokens\。 该BULK选项需要ADMINISTER BULK OPERATIONSADMINISTER DATABASE BULK OPERATIONS权限。 这些权限应被视为等效于 sysadmin