你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于: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 和托管硬件安全模块(HSM)。 建议使用托管标识身份验证方法,以允许不同的 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 及在密钥保管库中创建的密钥。 有关详细信息,请参阅 创建密钥保管库。
注释
仅支持 Azure Key Vault 和 Azure Key Vault 托管 HSM。 不支持 Azure 云 HSM。
- 使用 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.net]
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 可扩展密钥管理。
创建用于托管硬件安全模块(HSM)的凭据
若要创建用于 Azure Key Vault 托管硬件安全模块(HSM)的凭据,请使用以下语法:
CREATE CREDENTIAL [<akv-name>.managedhsm.azure.net]
WITH IDENTITY = 'Managed Identity'
FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;
有关使用 AKV 设置 EKM 的详细信息,请参阅 使用 Azure Key Vault 设置 SQL Server TDE 可扩展密钥管理。
用于将现有 EKM 配置升级以使用托管标识的 T-SQL 命令
如果当前配置使用机密将 EKM 与 AKV 配合使用,则需要删除现有凭据并使用托管标识创建新凭据。 以下 T-SQL 命令演示如何升级现有 EKM 配置以使用托管标识:
使用托管标识创建凭据:
CREATE CREDENTIAL [<akv-name>.vault.azure.net] 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 VM 上唯一支持 SQL Server 托管标识的 Azure 服务包括 EKM 的托管标识支持以及使用托管标识备份和还原到 URL。
- 使用 AKV 的 EKM 的托管标识支持需要最新的 SQL Server 连接器版本。 请确保从 Microsoft下载中心下载并安装最新版本。
- Microsoft Entra 身份验证只能为 Azure VM 上的 SQL Server 启用一个主要托管身份。 主托管标识用于 VM 上的所有 SQL Server 实例。