Пакет служб 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 для хранения конфиденциальной информации, а затем сохраните эти файлы конфигурации в защищенной папке. Затем можно изменить свойство DontSaveSensitive на ProtectionLevel , чтобы пакет не шифровался и не пытался сохранить секреты в пакете. При запуске пакета служб SSIS необходимые сведения загружаются из файла конфигурации. Убедитесь, что файлы конфигурации должным образом защищены, если они содержат конфиденциальную информацию.

  • Метод 5. Создание шаблона пакета. Для долгосрочного разрешения создайте шаблон пакета, который использует уровень защиты, отличный от параметра по умолчанию. Эта проблема не будет возникать в будущих пакетах.

Действия по воспроизведению проблемы

  1. Войдите в систему от имени пользователя, который не входит в группу SQLServerSQLAgentUser. Например, можно создать локального пользователя.
  2. Создайте пакет служб SSIS, а затем добавьте задачу ExecuteSQL. Используйте диспетчер соединений OLE DB к локальному файлу msdb, используя следующую строку: 'Windows Authentication' -SQLSourceType: "Direct Input" -SQLStatement: "sp_who".
  3. Запустите пакет, чтобы убедиться, что он успешно выполняется.
  4. Для свойства ProtectionLevel задано значение EncryptSensitiveWithPassword.
  5. Создайте задание агент 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 можно использовать в пакетных файлах и циклах, можно выполнить эти действия для нескольких пакетов одновременно.

  1. Измените пакет, который требуется зашифровать, с помощью пароля.

  2. Используйте служебную программу Dtutil.exe через операционную систему (cmd Exec) агент SQL Server шаг задания, чтобы изменить свойство на ProtectionLevelEncryptSensitiveWithUserKey. Этот процесс включает расшифровку пакета с помощью пароля, а затем повторное шифрование пакета. Ключ пользователя, используемый для шифрования пакета, является параметром шага задания агент 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. Кроме того, вы используете функцию Расширенное задание выходного файла. Вы также можете использовать параметр Включить выходные данные шага в журнал, чтобы перенаправить данные журнала в файл или в журнал заданий агент 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 прокси-серверы и службы SSIS см. в следующих разделах электронной документации по SQL Server 2005 г.:

  • Планирование выполнения пакета в агент SQL Server
  • Создание прокси-серверов агент SQL Server