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

SQL Server代理作业运行SSIS包无法解密列加密密钥

故障根本原因

两种运行场景的安全上下文不一致,是触发该报错的核心原因:

  • 手动本地执行SSIS包时,进程使用你当前登录的Windows用户身份运行,该身份可访问你此前安装证书时存入对应用户存储的加密证书,且持有私钥读取权限,因此解密流程正常。
  • 部署到SSISDB后通过SQL Server代理作业执行时,包的运行身份为SQL Server代理服务启动账号,或作业步骤中配置的SSIS执行代理账号,该账号默认无法访问你此前安装在个人用户存储下的证书,也未被授予证书私钥的读取权限,调用MSSQL_Certificate_Store密钥存储提供程序时无法获取有效解密证书,最终抛出解密失败错误。

常见的具体触发场景包括:证书被安装在单用户的Current User(当前用户)证书路径下、SQL代理运行账号缺少证书私钥读取权限、SSIS包保护级别配置错误导致敏感信息无法跨用户读取。

排查步骤
  • 确认作业实际运行身份:打开SSMS找到对应代理作业,进入作业步骤属性页,记录该步骤配置的「运行身份」对应的准确账号名称,注意区分SQL代理服务账号、自定义SSIS代理账号两类身份。
  • 检查证书存储位置:打开证书管理器,确认你安装的列加密证书是存放在Local Machine(本地计算机)存储路径,还是仅存放在你个人账号的Current User存储路径下——后者仅你的个人账号可访问,其他账号无法读取。
  • 检查私钥权限:如果证书存放在本地计算机存储下,查看证书私钥的访问控制列表,确认SQL代理作业的运行账号是否在列表内、是否被授予私钥读取权限。
  • 检查SSIS包保护级别:确认部署到SSISDB的包是否使用了EncryptSensitiveWithUserKey保护级别,该级别下包内存储的敏感配置仅当初开发保存包的用户可解密,其他账号运行时无法读取证书关联的敏感信息。
修复方案
  1. 调整证书存储位置:将列加密所需的证书导入到Local Machine\My(本地计算机-个人)证书存储路径下,避免存放在单用户的个人存储中导致其他账号无法访问。
  2. 配置私钥访问权限:打开本地计算机证书管理控制台(运行certlm.msc即可唤起),找到对应加密证书,右键选择「所有任务-管理私钥」,在权限配置页添加SQL代理作业的运行账号,为其授予读取权限即可,无需分配修改、完全控制等高风险权限。
  3. 修正包保护级别:将SSIS包的保护级别调整为Rely on server storage and roles for access control(依托SSISDB服务器存储和角色控制访问,是SSISDB部署场景的标准配置),或EncryptSensitiveWithPassword,重新部署包后在SSISDB中正确配置相关敏感参数值。
  4. 若作业使用自定义SSIS代理账号运行,需确认代理关联的凭据有效,凭据对应的Windows账号同样已被授予证书私钥的读取权限。

验证提示:配置完成后可先手动用对应运行账号触发包执行,确认解密正常后再配置代理作业调度,可快速验证权限配置是否生效。

内容的提问来源于stack exchange,提问作者aredla revanth reddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:27:17