You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Azure Data Factory迁移SQL Server加密表至Azure SQL遇解密故障

问题分析与解决办法

错误22301:CurrentUser证书存储找不到指定指纹证书

原因

Azure Data Factory(ADF)的Copy活动运行在Azure托管环境或自托管集成运行时(IR)环境,无法直接访问本地CurrentUser证书存储中的证书。本地证书仅适用于SSIS这类本地运行工具,ADF必须使用托管密钥管理服务(如Azure Key Vault,AKV)来访问Always Encrypted密钥。

解决方向

直接放弃本地证书方案,改用AKV托管列主密钥(CMK),并确保ADF能通过合法权限访问AKV。


错误2200:解密列失败+AKV Provider资源缺失

该错误由两个问题叠加导致,需分别处理:

1. Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider资源缺失

原因

若使用自托管集成运行时,默认未预装AKV密钥提供程序组件,导致ADF无法调用AKV完成解密操作。

解决步骤

  • 下载与你的SQL Server驱动版本匹配的Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider NuGet包(建议选用最新稳定版)。
  • 解压NuGet包,将其中的Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider.dll及依赖DLL复制到自托管IR安装目录下的Shared文件夹(默认路径:C:\Program Files\Microsoft Integration Runtime\5.0\Shared\)。
  • 重启自托管IR服务,确保组件加载生效。

2. 解密Firstname列失败

核心检查点

  • AKV权限配置:给ADF使用的身份(托管标识/服务主体)分配AKV的以下权限:
    • 密钥权限:Get、Wrap Key、Unwrap Key(解密必须依赖这些操作)
    • 确保权限范围覆盖目标列主密钥(CMK)
  • Linked Service配置验证:
    • 在SQL Server Linked Service的Always Encrypted设置中,选择Azure Key Vault作为密钥存储类型。
    • 确认连接字符串已添加Column Encryption Setting=Enabled参数(启用Always Encrypted解密逻辑)。
    • 验证AKV的认证方式(托管标识/服务主体)可正常访问AKV(通过测试连接确认)。
  • 第三方SQL Server密钥关联:
    • 确认第三方SQL Server中的**列加密密钥(CEK)是由AKV中的列主密钥(CMK)**加密的。若原CMK为本地证书,需第三方协助将CMK迁移至AKV(因他们管控数据库)。

额外验证步骤

  • 测试自托管IR能否同时访问第三方SQL Server和AKV(排查网络连通性、防火墙规则)。
  • 使用拥有AKV权限的身份,手动运行带Column Encryption Setting=Enabled参数的SQL查询,验证解密是否正常,排除密钥本身的问题。

内容的提问来源于stack exchange,提问作者Gav Cheal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 04:24:25