Код ошибки SSIS DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER — все перепробовал

Я создал пакет SSIS и пытаюсь запустить его локально. Мы используем конфигурации пакетов, которые указывают на таблицы sql и файл конфигурации XML. Пакет успешно работал около недели, даже когда он был развернут в задании агента SQL Server в нашей среде STAGE.

Теперь единственный способ запустить пакет — не использовать конфигурации пакета и выбрать EncryptSensitivewithPassword. Если я изменю пакет на DontSaveSensitive, я постоянно получаю следующую ошибку:

Доступна запись OLE DB. Источник: «Собственный клиент Microsoft SQL Server 11.0». Hresult: 0x80040E4D Описание: «Ошибка входа в систему для пользователя Test_User». Ошибка: 0xC020801C в AgentCompany, поиск [37]: код ошибки SSIS DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. Вызов метода AcquireConnection для диспетчера соединений "Test" завершился с ошибкой с кодом 0xC0202009. Перед этим могут быть опубликованы сообщения об ошибках с дополнительной информацией о том, почему не удалось вызвать метод AcquireConnection.

Так странно, что около недели назад этот пакет работал нормально с конфигурациями и опцией DontSaveSensitive.

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

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

Я очень смущен. Пожалуйста помоги!

Обновление файла dtsconfig Повторное создание диспетчеров соединений Создание некоторой задачи DFT DelayValidation to true Изменение времени выполнения на 32-битный EncrpytPasswordSensitive с удаленными конфигурациями пакетов --- Это работает, но это не стандарт в моей компании, и я не так разрабатывал и тестировал пакет перед


person Netta G    schedule 26.06.2019    source источник
comment
Вы используете пользователей SQL Server для своего пакета SSIS, и у вас настроены конфигурации для предоставления имени пользователя и пароля, я полагаю? Где находится XML-файл, который ожидает найти пакет SSIS? Когда вы запускаете его локально, как вы его запускаете - f5 в Visual Studio или через командную строку?   -  person billinkc    schedule 26.06.2019
comment
Файл конфигурации xml находится на сервере, на котором будет выполняться задание. Он находится в файле e:\, поэтому, когда я запускаю его локально, я указываю свой диск E на тестовый сервер, содержащий конфигурацию xml. Когда я запускаю локально, я нажимаю кнопку воспроизведения/f5   -  person Netta G    schedule 26.06.2019
comment
Я бы начал с просмотра окна результатов/вывода в Visual Studio. Вы ищете... информационное (возможно, предупреждение) событие, которое укажет, были ли какие-либо проблемы с применением значений конфигурации. За исключением этого, я бы попытался установить DelayValidation в значение true для диспетчера соединений SQL Server и любых задач потока данных, которые используют указанные диспетчеры соединений. Если это решит проблему, значит, пакет пытался проверить ресурс до того, как настройки были применены к соединению. Задержка позволяет конфигам активироваться.   -  person billinkc    schedule 26.06.2019
comment
Хорошо, я могу попробовать это. Это просто странно, потому что мне никогда не приходилось устанавливать для проверки задержки значение true ни в одном из наших пакетов ssis.   -  person Netta G    schedule 26.06.2019
comment
Обновление ---- это не сработало. Я собираюсь попытаться пересобрать пакет в отдельном экземпляре SSDT и посмотреть. Отвечу в ближайшее время.   -  person Netta G    schedule 26.06.2019
comment
Я думаю, что может быть что-то не так с файлом dtsconfig   -  person Netta G    schedule 27.06.2019


Ответы (1)


Когда вы открываете/запускаете пакет, запускается событие OnInformation, которое говорит что-то вроде

Пакет пытается выполнить настройку из XML-файла «c:\ssisdata\so_56776576.dtsconfig».

Когда Visual Studio/SSDT открывает/запускает пакет, в котором говорится, что он использует конфигурацию, но по каким-то причинам не может их получить, вы должны увидеть такие сообщения, как

Предупреждение при загрузке so_56776576.dtsx: сбой при импорте файла конфигурации: "c:\ssisdata\so_56776576.dtsconfig"

а также

Предупреждение при загрузке so_56776576.dtsx: файл конфигурации "c:\ssisdata\so_56776576.dtsconfig" не найден. Проверьте каталог и имя файла.

а также

Предупреждение при загрузке so_56776576.dtsx: не удалось загрузить хотя бы одну из записей конфигурации для пакета. Проверьте записи конфигурации для «Конфигурация 1» и предыдущие предупреждения, чтобы увидеть описание того, какая конфигурация не удалась.

Если кто-то вручную отредактировал файл конфигурации и сломал XML, вы увидите предупреждение вроде

Не удается загрузить файл конфигурации XML. Файл конфигурации XML может быть неправильно сформирован или недействителен.

Важно отметить, что касается конфигурации: если конфигурация не может быть найдена, SSIS продолжит работу со значениями времени разработки. Вот почему очень важно проверять предупреждения, выдаваемые при запуске вашего пакета. Если вы запускаете вручную, убедитесь, что вы указали /rep ew, чтобы сообщать об ошибках и предупреждениях.

Догадки о первопричине

Пакет имеет уровень защиты EncryptSensitiveWithUserKey, что означает, что учетные данные AD создателя пакета используются для хеширования вещей, которые могут содержать конфиденциальную информацию. Я мог бы использовать аутентификацию AD в своей строке подключения и указать, что подключение должно быть доверенным, но весь этот блок все равно будет зашифрован для моей учетной записи Active Directory. Когда вы придете и попытаетесь сохранить пакет, он не сможет расшифровать конфиденциальные данные, поскольку вы не я.

Есть два способа обойти это — использовать общий ключ (EncryptSensitiveWithPassword/EncryptPackageWithPassword), с которым неудобно иметь дело, и это противоречит духу секретности, поскольку секрет известен всем. Другой подход, который вы определили, — это DontSaveSensitive, и я использую его для всего этого.

Проблема, которую необходимо преодолеть, заключается в том, что с DontSaveSensitive каждый раз, когда вы сохраняете, SSIS будет стирать любые знания об имени пользователя и пароле из тех мест, где они могут храниться — например, в диспетчере соединений. Стратегия 2005/2008 для защиты от этого заключалась в использовании конфигурации или явных переопределений во время выполнения для предоставления имени пользователя и пароля. Мой типичный подход заключался в использовании конфигурации, основанной на таблице, а не на XML, поскольку я лучше защищал конфиденциальные данные в таблице, чем возился с ACL в файловой системе. Другая проблема, с которой мы столкнулись при работе с несколькими разработчиками и конфигурацией на основе файлов, заключалась в том, что либо все должны были настроить свои файловые системы одинаково (и мы, разработчики, являемся уникальными радужными снежинками, так что это маловероятно), либо нам нужно использовать общий сетевой файл, который отлично подходит до тех пор, пока кто-то добавляет к нему свои собственные значения и ломает его или удаляет ваши изменения или любые другие проблемы.

person billinkc    schedule 26.06.2019