如何恢复或重置SSIS包密码?

问题描述 投票:0回答:9

我有一些受密码保护的 SSIS 包(它们的保护级别显然是 EncryptAllWithPassword),由离开公司且无法再访问的开发人员创建,尝试打开它们会出现以下错误,因为密码无法打开供应:

加载“Package.dtsx”时出错:无法删除包保护 错误 0xC0014037“该包是 用密码加密。这 未指定密码,或未指定密码 正确。”。这发生在 CPackage::LoadFromXML 方法。

有什么办法可以打开这些包裹吗?我可以访问最初用于创建这些包的管理员帐户,并让同一个人使用我知道的不同密码加密其他包。

我已就该问题联系了当地的 Microsoft 代表,到目前为止,他们只将我链接到一个描述如何设置或更改密码的页面,这没有帮助,因为我需要先打开包或提供旧密码。有没有人遇到过类似的情况或知道解决这个问题的方法?

sql-server ssis passwords etl
9个回答
23
投票

执行以下查询

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”,接下来的字符串是密码


6
投票

使用此查询查找您的包裹密码:

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 下一个字符串,后面的字符串将是用引号引起来的密码。


2
投票

如果使用EncryptAllWithPassword,我认为没有任何方法可以恢复包,整个包都是加密的,没有密码就无法解码。当然可以尝试密码猜测或字典攻击,希望开发人员使用弱密码。

如果是 EncryptSensitiveWithPassword - 您可以打开,然后重新输入连接字符串密码。


2
投票

只需用记事本打开软件包,将保护级别从2更改为1即可

<DTS:Property DTS:Name="ProtectionLevel">1</DTS:Property>

1
投票

该包似乎也存储在 SQL Server(msdb 数据库)上,将其从 Integration Services 导出到文件系统中允许我们打开它(带有有关丢失敏感数据的警告)。该解决方案非常适合这种特殊情况;我们主要需要知道这些包中发生了什么。


0
投票

以下是重置 SSIS 包密码的步骤

  1. 编辑SSIS项目文件
  2. 将保护级别更改为 EncryptAllWithPassword 并更新新密码
  3. 保存项目文件。
  4. 将每个包的保护级别更改为EncryptAllWithPassword
  5. 保存全部并重新编译解决方案

0
投票

我将@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%'

这向我展示了所有带有密码的软件包。


-1
投票

我同意迈克尔关于密码猜测或字典攻击是一种好方法的评论。

我正打算还建议使用像 EC2 这样的云计算环境来分而治之......但后来我意识到你被困在 Windows 上了!


-1
投票

将包的

Protection level
更改为
encrypt
sensitiveKey
,一切都会正常工作。 :)

© www.soinside.com 2019 - 2024. All rights reserved.