Как восстановить или сбросить пароль пакета SSIS?
-
09-09-2019 - |
Вопрос
У меня есть несколько пакетов SSIS, которые были защищены паролем (их уровень защиты, по-видимому, EncryptAllWithPassword) разработчиком, который покинул компанию и с которым больше нельзя связаться, и попытка открыть их выдает следующую ошибку, поскольку пароль не может быть предоставлен:
Ошибка при загрузке 'Package.dtsx' :Не удалось удалить защиту пакета с ошибкой 0xC0014037 "Пакет зашифрован паролем. Пароль не был указан или не является правильным"..Это происходит в методе CPackage::LoadFromXML.
Есть ли какой-нибудь способ открыть эти пакеты?У меня есть доступ к учетной записи администратора, первоначально использовавшейся для создания этих пакетов, и есть другие пакеты, зашифрованные тем же человеком, но с использованием другого пароля, который я знаю.
Я связался с местным представителем Microsoft по поводу этой проблемы, и пока они связали меня только с страница, описывающая, как установить или изменить пароль, что не помогает, потому что мне нужно сначала открыть пакет или ввести старый пароль.Кто-нибудь был в подобной ситуации раньше или знает способ обойти эту проблему?
Решение
Я не думаю, что есть какой-либо способ восстановить пакет, если используется EncryptAllWithPassword, весь пакет зашифрован и не может быть расшифрован без пароля.Конечно, можно попробовать угадать пароль или атаковать по словарю, надеясь, что разработчик использовал слабый пароль.
Если он чувствителен к шифрованию с паролем - вы можете открыть, а затем просто повторно ввести пароли строки подключения.
Другие советы
выполните приведенный ниже запрос
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%'
В результатах отображается единственный столбец - команда просмотреть этот текст в поисках / РАСШИФРОВАТЬ следующую строку после того, как это будет пароль, заключенный в кавычки.
Похоже, что пакет также был сохранен на SQL Server (база данных msdb), экспорт его из служб Integration Services в файловую систему позволяет нам открыть его (с предупреждением о потере конфиденциальных данных).Это решение идеально подходит для данной конкретной ситуации;в основном нам нужно было знать, что происходит в этих пакетах.
Просто откройте пакет в блокноте и измените уровень защиты с 2 на 1
<DTS:Property DTS:Name="ProtectionLevel">1</DTS:Property>
Я согласен с комментарием Майкла о подборе пароля или атаке по словарю как о хорошем подходе.
Я как раз собирался также предложить использовать облачную вычислительную среду , такую как EC2 , для " разделяй и властвуй " ...но потом я понял, что вы застряли в Windows!
Измените Protection level
из упаковки в encrypt
с sensitiveKey
и все будет работать нормально.:)