Как восстановить или сбросить пароль пакета служб SSIS?

У меня есть несколько пакетов служб SSIS, которые были защищены паролем (их уровень защиты, по-видимому, EncryptAllWithPassword) разработчиком, который покинул компанию и больше не может быть достигнут, и попытка открыть их дает следующую ошибку, так как пароль не может быть предоставлен:

ошибка загрузки пакета.dtsx': не удалось удалить защиту пакета с ошибкой 0xC0014037 "пакет зашифровано паролем. Этот пароль не указан или не указан правильный.". Это происходит в Метод CPackage:: LoadFromXML.

есть ли способ открыть эти пакеты? У меня есть доступ к учетной записи администратора, которая изначально использовалась для создания этих пакетов, и есть другие пакеты, зашифрованные тем же человеком, но с другим паролем, который я знаю.

Я связался с местным представителем Microsoft по этому вопросу, и до сих пор они только связали меня с страница, описывающая, как установить или изменить пароль, что не помогает, потому что мне нужно сначала открыть пакет или предоставить старый пароль. Кто-нибудь был в подобной ситуации или знает способ обойти эту проблему?

7 ответов


Я не думаю, что есть какой-либо способ восстановить пакет, если используется EncryptAllWithPassword, весь пакет зашифрован и не может быть декодирован без пароля. Можно попробовать, конечно, угадать пароль или атаковать словарь, надеясь, что разработчик использовал слабый пароль.

Если это EncryptSensitiveWithPassword - вы можете открыть, а затем просто повторно ввести пароли строки подключения.


выполните следующий запрос

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%'

в результатах единственным отображаемым столбцом является команда look through that text for / DECRYPT следующую строку после того, как она будет паролем, заключенным в кавычки.


похоже, что пакет также был сохранен на SQL Server (база данных msdb), экспорт его из служб Integration Services в файловую систему позволяет нам открыть его (с предупреждением о потере конфиденциальных данных). Это решение отлично работает для этой конкретной ситуации; нам в основном нужно было знать, что происходит в этих пакетах.


просто откройте пакет в блокноте и измените уровень защиты от 2 до 1

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

Я согласен с комментарием Майкла О угадывании пароля или атаке словаря как хорошем подходе.

Я как раз собирался предложить использовать облачную вычислительную среду, такую как EC2, чтобы разделить и победить ... но потом я понял, что вы застряли на Windows!


изменить Protection level пакета encrypt С sensitiveKey и все будет работать нормально. :)