我有一些受密码保护的 SSIS 包(它们的保护级别显然是 EncryptAllWithPassword),由离开公司且无法再访问的开发人员创建,尝试打开它们会出现以下错误,因为密码无法打开供应:
加载“Package.dtsx”时出错:无法删除包保护 错误 0xC0014037“该包是 用密码加密。这 未指定密码,或未指定密码 正确。”。这发生在 CPackage::LoadFromXML 方法。
有什么办法可以打开这些包裹吗?我可以访问最初用于创建这些包的管理员帐户,并让同一个人使用我知道的不同密码加密其他包。
我已就该问题联系了当地的 Microsoft 代表,到目前为止,他们只将我链接到一个描述如何设置或更改密码的页面,这没有帮助,因为我需要先打开包或提供旧密码。有没有人遇到过类似的情况或知道解决这个问题的方法?
执行以下查询
SELECT sjs.command
FROM msdb.dbo.sysjobs sj
JOIN msdb.dbo.sysjobsteps sjs ON sj.job_id = sjs.job_id
WHERE sj.name = 'your package name'
在结果视图中
检查文本“/DECRYPT”,接下来的字符串是密码
使用此查询查找您的包裹密码:
SELECT step.command
FROM msdb.dbo.sysjobs job
JOIN msdb.dbo.sysjobsteps step ON job.job_id = step.job_id
WHERE step.command like '%Your Package Name%'
在结果中,唯一显示的列是命令在该文本中查找 /DECRYPT 下一个字符串,后面的字符串将是用引号引起来的密码。
如果使用EncryptAllWithPassword,我认为没有任何方法可以恢复包,整个包都是加密的,没有密码就无法解码。当然可以尝试密码猜测或字典攻击,希望开发人员使用弱密码。
如果是 EncryptSensitiveWithPassword - 您可以打开,然后重新输入连接字符串密码。
只需用记事本打开软件包,将保护级别从2更改为1即可
<DTS:Property DTS:Name="ProtectionLevel">1</DTS:Property>
该包似乎也存储在 SQL Server(msdb 数据库)上,将其从 Integration Services 导出到文件系统中允许我们打开它(带有有关丢失敏感数据的警告)。该解决方案非常适合这种特殊情况;我们主要需要知道这些包中发生了什么。
以下是重置 SSIS 包密码的步骤
我将@Venky 解决方案稍微修改为:
SELECT sjs.command
FROM msdb.dbo.sysjobs sj
JOIN msdb.dbo.sysjobsteps sjs ON sj.job_id = sjs.job_id
WHERE command like '%decrypt%'
这向我展示了所有带有密码的软件包。
我同意迈克尔关于密码猜测或字典攻击是一种好方法的评论。
我正打算还建议使用像 EC2 这样的云计算环境来分而治之......但后来我意识到你被困在 Windows 上了!
将包的
Protection level
更改为encrypt
与sensitiveKey
,一切都会正常工作。
:)