Пакет SSIS не выполняется при вызове на этапе задания агента SQL Server
Эта статья поможет устранить проблему, возникающую при вызове пакета служб SSIS из шага задания агент SQL Server.
Оригинальная версия продукта: SQL Server
Исходный номер базы знаний: 918760
Симптомы
При вызове пакета Microsoft SQL Server Integration Services (SSIS) из шага задания агент SQL Server пакет служб SSIS не запускается. Однако если пакет служб SSIS не изменяется, он будет успешно работать вне агент SQL Server.
Решение
Для решения этой проблемы воспользуйтесь одним из описанных ниже способов. Наиболее подходящий метод зависит от среды и причины сбоя пакета. Причины, по которым пакет может завершиться ошибкой, приведены ниже.
- Учетная запись пользователя, используемая для запуска пакета в агент SQL Server, отличается от исходного автора пакета.
- Учетная запись пользователя не имеет необходимых разрешений для подключения или доступа к ресурсам за пределами пакета служб SSIS.
Пакет может не выполняться в следующих сценариях:
- Текущий пользователь не может расшифровать секреты из пакета. Этот сценарий может произойти, если текущая учетная запись или учетная запись выполнения отличается от исходного автора пакета, а параметр свойства ProtectionLevel пакета не позволяет текущему пользователю расшифровывать секреты в пакете.
- Подключение SQL Server, использующее встроенную безопасность, завершается сбоем, так как текущий пользователь не имеет необходимых разрешений.
- Доступ к файлам завершается ошибкой, так как текущий пользователь не имеет необходимых разрешений для записи в общую папку, к которому обращается диспетчер соединений. Например, этот сценарий может происходить с поставщиками текстовых журналов, которые не используют имя входа и пароль. Этот сценарий также может возникать с любой задачей, которая зависит от диспетчера подключений к файлам, например задачи файловой системы SSIS.
- Конфигурация пакета SSIS на основе реестра использует
HKEY_CURRENT_USER
разделы реестра. РазделыHKEY_CURRENT_USER
реестра зависят от пользователя. - Для задачи или диспетчера соединений требуется, чтобы текущая учетная запись пользователя имеет правильные разрешения.
Чтобы устранить проблему, используйте следующие методы:
Метод 1. Использование учетной записи прокси-сервера агент SQL Server. Создайте учетную запись прокси-сервера агент SQL Server. Эта учетная запись-посредник должна использовать учетные данные, которые позволяют агент SQL Server запускать задание в качестве учетной записи, создающей пакет или в качестве учетной записи с необходимыми разрешениями.
Этот метод работает для расшифровки секретов и удовлетворения ключевых требований пользователя. Однако этот метод может иметь ограниченный успех, так как ключи пользователя пакета SSIS включают текущего пользователя и текущего компьютера. Поэтому при перемещении пакета на другой компьютер этот метод по-прежнему может завершиться ошибкой, даже если шаг задания использует правильную учетную запись прокси-сервера.
Метод 2. Задайте свойству пакета
ProtectionLevel
служб SSIS значение ServerStorage. Измените свойство SSIS Package ProtectionLevel на ServerStorage. Этот параметр сохраняет пакет в базе данных SQL Server и позволяет управлять доступом с помощью ролей базы данных SQL Server.Метод 3. Задайте для свойства пакета
ProtectionLevel
служб SSIS значениеEncryptSensitiveWithPassword
. Измените свойство пакетаProtectionLevel
служб SSIS наEncryptSensitiveWithPassword
. Этот параметр использует пароль для шифрования. Затем можно изменить командную строку шага задания агент SQL Server, чтобы включить этот пароль.Метод 4. Использование файлов конфигурации пакета SSIS. Используйте файлы конфигурации пакета SSIS для хранения конфиденциальной информации и хранения этих файлов конфигурации в защищенной папке. Затем можно изменить
ProtectionLevel
свойствоDontSaveSensitive
так, чтобы пакет не шифровался и не пытается сохранить секреты в пакете. При запуске пакета служб SSIS необходимые сведения загружаются из файла конфигурации. Убедитесь, что файлы конфигурации достаточно защищены, если они содержат конфиденциальную информацию.Метод 5. Создание шаблона пакета. Для долгосрочного разрешения создайте шаблон пакета, использующий уровень защиты, который отличается от параметра по умолчанию. Эта проблема не будет возникать в будущих пакетах.
Действия по воспроизведению проблемы
- Войдите в систему как пользователь, который не входит в группу SQLServerSQLAgentUser. Например, можно создать локального пользователя.
- Создайте пакет служб SSIS и добавьте задачу ExecuteSQL. Используйте диспетчер подключений OLE DB к локальному файлу msdb, используя следующую строку:
'Windows Authentication' -SQLSourceType: "Direct Input" -SQLStatement: "sp_who"
- Запустите пакет, чтобы убедиться, что он успешно запущен.
- Свойство
ProtectionLevel
имеет значениеEncryptSensitiveWithPassword
. - Создайте задание агент SQL Server и шаг задания. В списке запуска от имени щелкните агент SQL Server Службу, чтобы выполнить шаг задания. Текст в журнале заданий агент SQL Server отображает сведения, похожие на следующие:
Расшифровка секретов пакета
Значением по умолчанию для свойства пакета ProtectionLevel
служб SSIS является EncryptSensitiveWithUserKey
. При сохранении пакета служба SSIS шифрует только части пакета, содержащие свойства, помеченныеsensitive
, например пароли, имена пользователей и строка подключения. Поэтому при перезагрузке пакета текущий пользователь должен удовлетворять требованиям шифрования для sensitive
расшифровки свойств. Однако текущий пользователь не должен удовлетворять требованиям шифрования для загрузки пакета. При запуске пакета с помощью шага задания агент SQL Server учетная запись по умолчанию — это учетная запись службы агент SQL Server. Эта учетная запись по умолчанию, скорее всего, отличается от пользователя автора пакета. Таким образом, шаг задания агент SQL Server может загрузить и начать выполнение шага задания, но пакет завершается сбоем, так как он не может завершить подключение. Например, пакет не может завершить подключение OLE DB или FTP-подключение. Пакет завершается ошибкой, так как он не может расшифровать учетные данные, необходимые для подключения.
Внимание
Рассмотрим процесс разработки и среду, чтобы определить, какие учетные записи необходимы и используются на каждом компьютере. Параметр ProtectionLevel
EncryptSensitiveWithUserKey свойства является мощным параметром. Этот параметр не следует сбрасывать со скидкой, так как сначала это приводит к осложнению развертывания. Вы можете зашифровать пакеты при входе в соответствующую учетную запись. Можно также использовать служебную программу командной строки SSIS Dtutil.exe для изменения уровней защиты с помощью файла .cmd и подсистемы команд агент SQL Server. Например, выполните следующие действия. Так как вы можете использовать программу Dtutil.exe в пакетных файлах и циклах, вы можете выполнять следующие действия для нескольких пакетов одновременно.
Измените пакет, который требуется зашифровать с помощью пароля.
Используйте служебную программу Dtutil.exe через агент SQL Server шаг задания операционной системы (cmd Exec), чтобы изменить свойство
EncryptSensitiveWithUserKey
наProtectionLevel
. Этот процесс включает расшифровку пакета с помощью пароля, а затем повторное шифрование пакета. Ключ пользователя, используемый для шифрования пакета, является параметром шага задания агент SQL Server в списке запуска от имени.Примечание.
Так как ключ включает имя пользователя и имя компьютера, эффект перемещения пакетов на другой компьютер может быть ограничен.
Убедитесь, что у вас есть подробные сведения об ошибке пакета служб SSIS
Вместо того чтобы полагаться на ограниченные сведения в журнале заданий агент SQL Server, можно использовать ведение журнала служб SSIS, чтобы убедиться, что у вас есть сведения об ошибке пакета служб SSIS. Вы также можете запустить пакет с помощью команды подсистемы exec вместо команды подсистемы SSIS.
Сведения о ведении журнала служб SSIS
Поставщики журналов и журналов служб SSIS позволяют записывать сведения о выполнении пакета и сбоях. По умолчанию пакет не регистрирует сведения. Необходимо настроить пакет для регистрации сведений. При настройке пакета для регистрации подробных сведений отображается следующая информация. В этом случае вы узнаете, что это проблема с разрешениями:
OnError,DOMAINNAME,DOMAINNAME\USERNAME,FTP Task,{C73DE41C-D0A6-450A-BB94-DF6D913797A1},{2F0AF5AF-2FFD-4928-88EE-1B58EB431D74},4/28/2006 1:51:59 PM,4/28/2006 1:51:59 PM,-1073573489,0x,Unable to connect to FTP server using "FTP Connection Manager".
OnError,DOMAINNAME,DOMAINNAME\USERNAME,Execute SQL Task,{C6C7286D-57D4-4490-B12D-AC9867AE5762},{F5761A49-F2F9-4575-9E2B-B3D381D6E1F3},4/28/2006 4:07:00 PM,4/28/2006 4:07:00 PM,-1073573396,0x,Failed to acquire connection "user01.msdb". Connection may not be configured correctly or you may not have the right permissions on this connection.
Сведения о команде подсистемы exec и выходных данных
Используя подход команды подсистемы exec, вы добавите подробные параметры ведения журнала консоли в командную строку SSIS для вызова исполняемого файла командной строки SSIS Dtexec.exe SSIS. Кроме того, вы используете функцию расширенного задания выходного файла. Вы также можете использовать параметр "Включить шаг", чтобы перенаправить сведения о ведении журнала в файл или в журнал заданий агент SQL Server.
Ниже приведен пример командной строки:
dtexec.exe /FILE "C:\_work\SSISPackages\ProtectionLevelTest\ProtectionLevelTest\AgentTesting.dtsx" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING V /CONSOLELOG NCOSGXMT
Ведение журнала консоли возвращает сведения, похожие на следующие сообщения:
Error: 2006-04-27 18:13:34.76 Code: 0xC0202009 Source: AgentTesting Connection manager "(local).msdb" Description: An OLE DB error has occurred. Error code: 0x80040E4D. An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E4D Description: "Login failed for user 'DOMAINNAME\username'.". End Error
Error: 2006-04-28 13:51:59.19 Code: 0xC0016016 Source: Description: Failed to decrypt protected XML node "DTS:Property" with error 0x80070002 "The system cannot find the file specified.". You may not be authorized to access this information. This error occurs when there is a cryptographic error. Verify that the correct key is available. End Error
Log: Name: OnError Computer: COMPUTERNAME Operator: DOMAINNAME\username Source Name: Execute SQL Task Source GUID: {C6C7286D-57D4-4490-B12D-AC9867AE5762} Execution GUID: {7AFE3D9E-5F73-42F0-86FE-5EFE264119C8} Message: Failed to acquire connection "(local).msdb". Connection may not be configured correctly or you may not have the right permissions on this connection. Start Time: 2006-04-27 18:13:34 End Time: 2006-04-27 18:13:34 End Log
Ссылки
- Дополнительные сведения об аналогичной проблеме см. в сообщении об ошибке "Загрузка ошибок" при попытке запустить пакет служб SQL Server Integration Services.
- Ошибка подключения 0x80004005 возникает при запуске пакета служб SSIS в качестве задания агента SQL.
- Дополнительные сведения о создании шаблонов пакетов см. в статье "Создание пакета" в SQL Server Data Tools с помощью шаблона пакета.
- Дополнительные сведения о безопасности пакетов служб SSIS и свойстве см. в разделе "Параметр уровня защиты"
ProtectionLevel
и каталог SSISDB.