Код ошибки служб SSIS DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER - перепробовал все - PullRequest
2 голосов
/ 26 июня 2019

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

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

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

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

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

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

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

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

1 Ответ

1 голос
/ 27 июня 2019

Когда вы открываете / запускаете пакет, запускается событие 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 в файловой системе. Другая проблема, с которой мы столкнулись с несколькими разработчиками и конфигурацией на основе файлов, заключалась в том, что либо каждый должен был настроить свои файловые системы одинаково (а мы разработчики - уникальные радужные снежинки, так что это маловероятно), либо мы должны использовать сетевой файл общего доступа, который хорош до кто-то добавляет свои собственные значения к нему и ломает его или удаляет ваши изменения или любые другие проблемы.

...