Подтвердить что ты не робот

Какие учетные данные пользователя использует каталог служб Integration Services для выполнения пакетов?

У нас есть пакет SSIS, который читает текстовые файлы из общего сетевого каталога. Когда я выполняю этот пакет в SSDT, он отлично работает. Однако, когда мы развертываем проект в Integration Services Catalog и пытаемся запустить тот же пакет, я получаю сообщение об ошибке, указывающее, что доступ к каталогу запрещен.

Мне всегда казалось, что когда я вхожу в базу данных и выполняю пакет SSIS из каталога служб Integration Services, он использует учетные данные пользователя MY и, следовательно, имеет доступ к рассматриваемой директории, так как мой профиль пользователя имеет доступ к нему.

Разве это не так? Использует ли SQL Server другой пользователь для выполнения пакетов из каталога IS? Есть ли опция run as another user? Любой вход будет оценен.

4b9b3361

Ответ 1

Выполнение пакета:

Инструменты данных SQL Server:

Учетные данные пользователя, под которым работает SQL Server Data Tools (SSDT), будут использоваться для выполнения пакетов, которые выполняются в SSDT.

В Windows Start\All Programs\Microsoft SQL Server 2012, если вы щелкнете Инструменты данных SQL Server, он будет запущен с вашими учетными данными. Для запуска под другой учетной записью пользователя вы можете нажать Ctrl + Shift, чтобы выбрать Run as different user.

Execute package from SSDT

Службы каталогов интеграции:

Когда вы щелкаете правой кнопкой мыши по пакету в Integration Services Catalog \ SSISDB \ <Folder name> \ Projects \ <Project name> \ Packages \ <Package name> и выбираете Execute..., чтобы запустить пакет. Пакет будет работать с учетными данными, используемыми для подключения к SQL Server Management Studio.

Обратите внимание, что если вы попытаетесь запустить пакет с использованием аутентификации SQL Server, вы получите следующее сообщение об ошибке:

Операция не может быть запущена учетной записью, использующей проверку подлинности SQL Server. Запустите операцию с учетной записью, использующей проверку подлинности Windows.

Execute

После нажатия Execute... SQL Server запускает процесс ISServerExec.exe, который запускает процесс Console Window Host:

Under SSIS Catalog execution hood

ISServerExec.exe - это программа, которая выполняет пакеты в каталоге служб SSIS. В этом случае он запускается от имени того же пользователя, который выполняет пакет служб SSIS из SQL Server Management Studio.

Задание агента SQL Server без прокси-сервера:

Когда вы запускаете пакет служб SSIS из задания агента SQL Server, шаг задания по умолчанию выполняется в SQL Server Agent Service Account. Службу агента SQL Server, связанную с учетной записью пользователя, можно найти, перейдя к Windows Start \ Administrative Tools \ Services, найдите агент агента SQL Server службы (Your Instance Name) и найдите учетную запись пользователя, указанную в списке Log On As

Задание агента SQL Server с прокси-сервером:

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

В приведенном ниже SO-ответе приведены пошаговые инструкции по созданию учетной записи-посредника для выполнения заданий агента SQL Server.

Как создать в моем задании агента SQL Server шаг, который будет запускать мой пакет служб SSIS?

Как проверить:

Пример пакета служб SSIS 2012:

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

  • Откройте Инструменты данных SQL Server и создайте пакет служб SSIS 2012 с именем SO_15289442.dtsx.

  • Создайте переменную с именем ExecutionUser типа данных String. Присвойте выражение @[System::UserName] переменной. UserName - системная переменная, которая предоставляет информацию о пользователе, выполняющем пакет.

  • Перетащите задачу "Отправить почту" на вкладку "Поток данных".

  • Создайте SMTP-соединение и назначьте его для SmtpConnection в редакторе задач Send Mail - Mail.

  • Укажите адреса электронной почты From и To.

  • Измените MessageSourceType на Variable.

  • Установите MessageSource на User::ExecutionUser.

  • Щелкните правой кнопкой мыши пакет и выберите "Развернуть", чтобы развернуть проект в каталоге служб Integration Services, доступном на выбранном вами сервере.

Пакетные исполнения

  • Запустите пакет в SSDT.

  • Откройте SSDT, используя параметр "Запуск от имени другого пользователя". Укажите другие учетные данные, отличные от ваших, и снова запустите пакет.

  • Запустите пакет из каталога служб Integration Services.

  • Создайте задание агента SQL Server для запуска пакета с использованием учетной записи службы агента SQL Server.

  • Создайте задание агента SQL Server для запуска пакета с использованием учетной записи-посредника.

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

Ваша проблема:

В вашем случае пакет будет выполняться под вашей учетной записью (при условии, что вы используете свои учетные данные для доступа к SSISDB), если щелкнуть правой кнопкой мыши и выбрать "Выполнить" из каталога служб Integration Services. Убедитесь, что у учетной записи есть доступ к сетевому пути.

Если вы запускаете свой пакет из задания агента SQL Server, прокси-счет является опцией run as another user, которую вы просматриваете.

Ответ 2

Похоже, у вас нет Kerberos, настроенного на вашем SQL Server (проблема с двойным хопом).

Вот проблема с протоколом MS, который был исправлен. https://connect.microsoft.com/SQLServer/feedback/details/767088/with-the-new-ability-to-execute-ssis-packages-from-tsql-kerberos-delegation-should-be-supported

Вот отличная запись в блоге о деталях этого: http://www.sqlscientist.com/2014/01/setup-kerberos-authentication-for-sql.html

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

Ответ 3

Это старый поток, но я полагаю, что проблема, с которой вы столкнулись, на самом деле связана с файлом. Используете ли вы имя UNC или букву диска. То есть ваш путь к файлу похож на "Z:\path\to\file.csv" или "\ server\share\path\to\file.csv"?

Если это буква диска, она будет работать нормально с вашего локального компьютера, так как у вас есть этот диск, но он не будет работать на сервере, поскольку буква диска не отображается.