SSIS包报错Key not valid for use in specified state. 求排查解决方法
解决SSIS包解密DTS:Password节点报错0x8009000B的问题
这个问题我之前帮不少同行排查过,核心就是SSIS包的敏感数据加密密钥不匹配导致的,尤其是你这种之前运行正常突然出问题的场景,大概率是运行环境的加密上下文变了。给你几个针对性的解决办法:
1. 调整包的保护级别(最常用的解决方案)
打开你的SSIS包(用Data Tools 2008),右键点击包→属性,找到ProtectionLevel属性:
- 如果之前设置的是
EncryptSensitiveWithUserKey或EncryptAllWithUserKey,这就是问题根源:这种方式是用当前登录用户的Windows凭据加密敏感数据(比如数据库密码),如果现在运行包的用户和开发/首次部署时的用户不一致,或者用户的Windows配置文件有变动,就会出现解密失败的情况。 - 推荐改成这两种方式:
EncryptSensitiveWithPassword:设置一个自定义密码,部署时把密码配置到执行环境(比如SQL Server代理作业步骤里,添加参数/DE <你的密码>)。DontSaveSensitive:不保存敏感数据,通过配置文件、环境变量或者SQL Server代理的凭据来传递密码等敏感信息,这种方式更安全也更适合生产环境。
2. 重新部署包并匹配执行账号
如果坚持要用用户密钥加密的方式:
- 用最初加密包的用户账号登录到服务器,重新部署一次SSIS包,确保服务器上的包文件和当前用户的加密密钥匹配。
- 检查SQL Server代理作业的执行账号:如果作业是用服务账号运行的,要么给这个账号授权访问加密密钥,要么切换回原来的开发用户来运行作业。
3. 修复Windows加密服务或用户配置文件
有时候用户的Windows本地加密存储出问题也会触发这个错误,可以试试:
- 用运行包的用户登录服务器,打开命令提示符,执行
rundll32.exe cryptext.dll,CryptExtAddDefaultCSP重置默认加密服务提供程序。 - 检查用户配置文件是否损坏,必要时重新创建该用户的Windows配置文件。
你遇到的错误信息:
Failed to decrypt protected XML node "DTS:Password" with error 0x8009000B "Key not valid for use in specified state.". 您可能无权访问此信息。此错误发生在出现加密错误时,请验证是否提供了正确的密钥。End Error Error: 2018-03-27...
内容的提问来源于stack exchange,提问作者Andrés Castrillo
相关产品推荐
相关产品推荐

