适用于: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 门户
- 手动
若要在 Azure 门户中启用主要托管标识,请执行以下步骤:
转到 Azure 门户中由 Azure Arc 启用的 SQL Server 资源。
在 “设置”下,选择 Microsoft Entra ID 和 Purview 以打开 Microsoft Entra ID 和 Purview 页面。
注释
如果未看到 “启用Microsoft Entra ID 身份验证 选项,请确保 SQL Server 实例已连接到 Azure Arc,并且已安装最新的 SQL 扩展。
在 Microsoft Entra ID 和 Purview 页上,选中 “使用主托管标识 ”旁边的框,然后使用 “保存” 应用配置:
向标识授予应用程序权限
重要
只有特权角色管理员或更高角色才能授予这些权限。
系统分配的托管身份(使用支持 Arc 的机器名)必须具有以下 Microsoft Graph 应用程序权限(应用程序角色):
- User.Read.All:允许访问 Microsoft Entra 用户信息。
- GroupMember.Read.All:允许访问 Microsoft Entra 组信息。
- Application.Read.ALL:允许访问 Microsoft Entra 服务主体(应用程序)信息。
可以使用 PowerShell 向托管标识授予所需的权限。 或者,可以 创建可分配角色的组。 创建组后,为组分配目录读取者角色,或者分配 User.Read.All
、GroupMember.Read.All
和Application.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 OPERATIONS
或ADMINISTER DATABASE BULK OPERATIONS
权限。 这些权限应被视为等效于 sysadmin。