适用于:Azure VM 上的 SQL Server(仅限 Windows)
本文介绍如何在 Azure 虚拟机(VM)上的 SQL Server 上将可扩展密钥管理(EKM)的托管标识与 Azure Key Vault(AKV)配合使用。
概述
从 SQL Server 2022 累积更新 17(CU17)开始,Azure VM 上的 SQL Server 支持用于 EKM 的 AKV 托管标识。 建议使用托管标识身份验证方法,以允许不同的 Azure 服务在不使用密码或机密的情况下对 Azure VM 资源上的 SQL Server 进行身份验证。 有关托管标识的详细信息,请参阅 托管标识类型。
注释
托管标识仅适用于 Azure VM 上的 SQL Server,而不支持本地 SQL Server。
有关为本地 SQL Server 设置 AKV 的 EKM 的信息,请参阅 使用 Azure Key Vault 设置 SQL Server TDE 可扩展密钥管理。
先决条件
- 在一个 Azure VM 上,其中的 SQL Server 2022 CU17 或更高版本已通过 SQL IaaS 代理扩展注册。
- 必须为 EKM 使用托管标识的 SQL Server 实例 配置Microsoft Entra 身份验证,无论该实例是否是向扩展注册的实例。
- 在密钥保管库中创建了一个 Azure Key Vault 和一个密钥。 有关详细信息,请参阅创建密钥保管库。
- 使用 AKV 的 EKM 支持托管标识。 Azure VM 上的 SQL Server 的主要托管标识需要:
- 分配有用户分配的托管标识或系统分配的托管标识。 有关详细信息,请参阅 在 Azure 虚拟机(VM)上配置托管标识 并 启用Microsoft Entra 身份验证。
- 如果您使用Azure 基于角色的访问控制,则需要为密钥保管库分配主要托管标识的
Key Vault Crypto Service Encryption User
角色;如果您使用保管库访问策略,则需授予解密密钥和加密密钥权限。
- 从 Microsoft下载中心下载最新版本的 SQL Server 连接器。
为 EKM 提供程序添加注册表项
在使用托管标识创建凭据之前,需要添加注册表项,使 EKM 提供程序能够使用托管标识。 此步骤需要由计算机管理员执行。 有关详细步骤,请参阅 步骤 4:添加注册表项以支持 EKM 供应商。
使用托管标识创建服务器凭证
以下示例演示如何为要用于 AKV 的托管标识创建凭据:
CREATE CREDENTIAL [<akv-name>.vault.azure.cn]
WITH IDENTITY = 'Managed Identity'
FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov
可以通过查询 sys.credentials
来检查 AKV 名称:
SELECT name, credential_identity
FROM sys.credentials
WITH IDENTITY = 'Managed Identity'
子句需要分配给 Azure VM 上的 SQL Server 的主要托管标识。
有关使用 AKV 设置 EKM 的详细信息,请参阅 使用 Azure Key Vault 设置 SQL Server TDE 可扩展密钥管理。
用于将现有 EKM 配置升级为使用托管标识的 T-SQL 命令
如果当前配置使用机密将 EKM 与 AKV 结合使用,则需要删除现有凭据,并使用托管身份创建新凭据。 以下 T-SQL 命令演示如何升级现有 EKM 配置以使用托管标识:
使用托管标识创建凭据:
CREATE CREDENTIAL [<akv-name>.vault.azure.cn] WITH IDENTITY = 'Managed Identity' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov
如果凭据使用与 SQL Server 管理域登录关联的机密,请删除现有凭据:
ALTER LOGIN [<domain>\<login>] DROP CREDENTIAL [<existing-credential-name>]
将新凭据与 SQL Server 管理域登录名相关联:
ALTER LOGIN [<domain>\<login>] ADD CREDENTIAL [<akv-name>.vault.azure.net]
可以使用以下查询检查加密的数据库视图以验证数据库加密:
SELECT *
FROM sys.dm_database_encryption_keys
WHERE database_id=db_id('<your-database-name>')
有关使用 AKV 设置 EKM 的详细信息,请参阅 使用 Azure Key Vault 设置 SQL Server TDE 可扩展密钥管理。
错误消息
跟踪标志 4675 可用于检查使用托管标识创建的凭据。 如果在未启用跟踪标志 4675 的情况下执行 CREATE CREDENTIAL
语句,如果未为服务器设置主托管标识,则不会发出错误消息。 若要对这种情况进行故障排除,必须在启用跟踪标志后删除并重新创建凭据。
未分配主要托管标识
如果未将主托管标识分配到 Azure VM 上的 SQL Server,则备份和还原操作将失败,并显示一条错误消息,指示未选择托管标识。
Msg 37563, Level 16, State 2, Line 14
The primary managed identity is not selected for this server. Enable the primary managed identity for Microsoft Entra authentication for this server. For more information see (https://aka.ms/sql-server-managed-identity-doc).`
SQL Server 连接器版本不支持使用 AKV 的 EKM 托管标识
如果使用以前的 SQL Server 连接器版本,则使用具有托管标识的服务器凭据执行 T-SQL CREATE ASYMMETRIC KEY
语句时,会发生以下错误:
Msg 37576, Level 16, State 2, Line 60
The current SQL Server Connector version for Microsoft Azure Key Vault does not support the managed identity (see https://aka.ms/sql-server-managed-identity-doc). Upgrade the SQL Server Connector to its latest version
局限性
- 服务器级托管标识仅适用于 Azure VM 上的 SQL Server,而不支持本地 SQL Server。 Linux 不支持服务器级托管标识。
- Azure Key Vault (AKV) 提供的 EKM 托管标识支持和使用托管标识进行备份和还原到 URL是唯一支持 Azure VM 上 SQL Server 托管标识的 Azure 服务。
- 使用 AKV 的 EKM 的托管标识支持需要最新的 SQL Server 连接器版本。 请确保从 Microsoft下载中心下载并安装最新版本。
- Microsoft Entra 身份验证只能为 Azure VM 上的 SQL Server 启用一个主要托管标识。 主托管标识用于 VM 上的所有 SQL Server 实例。