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

14

У меня возникают проблемы с разрешением моим пользователям выполнять пакеты служб SSIS разумным образом из-за различных уровней привилегий.

Сценарий : мы создали хранилище данных с двумя различными пакетами служб SSIS, отвечающими за загрузку его с данными, один должен запускаться автоматически (через задание агента SQL и работает нормально), а другой должен выполняться на спрос пользователей после того, как вышестоящие данные будут завершены, очищены и т. д.

Этот пакет выполняет очень привилегированные операции, включая резервное копирование базы данных в начале выполнения (чтобы быть уверенным, чтобы быть уверенным), удаление и воссоздание вычисленных таблиц и т. Д.

Я написал хранимую процедуру для выполнения этого задания через хранимые процедуры [SSISDB]. [Catalog]. [Create_execution] и [SSISDB]. [Catalog]. [Start_execution] .... это отлично работает при запуске под моей учетной записью (Я сисадмин).

Сбой хранимой процедуры при запуске обычным пользователем из-за более высокого уровня разрешений, требуемых в SSISDB и MSDB для постановки в очередь на выполнение, а сам пакет не выполнен, поскольку он работает в их (низком) контексте безопасности.

Что я пробовал :

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

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

  • Невозможность установить разрешения на выполнение для каждого задания
  • Надеемся настроить этот доступ через центральную роль сервера, чтобы обеспечить смену персонала с течением времени, а задания могут иметь только одного пользователя в качестве владельца.
  • Темный мир учетных записей прокси, учетных данных в сочетании с входами в систему sql-auth и т. Д.

Планы C и D

Единственные варианты, которые я могу придумать, - это создать выделенную учетную запись SQL Server с повышенными разрешениями и доверить пользователям, что они не будут передавать учетные данные или потерять возможность проверки того, кто запланировал импорт (как эта проблема решается в других областях. организации) или пользовательскую сборку веб-интерфейса исключительно для того, чтобы пользователи могли проходить аутентификацию в качестве своей учетной записи «Роль сервера», а затем разрешать веб-приложению запускать хранимую процедуру при втором (привилегированном) соединении.

Так....

Есть ли какой-нибудь совет, как:

  • иметь пакет служб SSIS для выполнения привилегированных операций
  • выполняется пользователем с низким уровнем привилегий (используя учетную запись Windows AD)
  • предпочтительно, когда доступ к запуску задания управляется через центральную роль сервера (у меня нет легкой возможности создать для них новую группу окон)
  • и где любые новые промежуточные / прокси-учетные записи являются учетными записями SQL Server Auth (опять же, очень ограниченная возможность вносить изменения в AD)

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

Ура, Тим

Редактировать....

Итак, сегодня я создал выделенную учетную запись SQL Server с разрешениями ssis_admin, создал три задания агента SQL Server, принадлежащие этому пользователю, и обновил хранимую процедуру, которую мои конечные пользователи вызывают для execute asэтого пользователя. Это не удалось из-за невозможности вызова create executionв качестве имени входа SQL Server, требуется учетная запись Windows.

Я обновил хранимую процедуру пользователей до execute asучетной записи Windows, на которой запущен SQL Server (учетная запись службы AD), предоставил ее ssis_adminи завершился с ошибкой

Текущий контекст безопасности не может быть восстановлен. Пожалуйста, переключитесь на исходную базу данных, где был вызван «Выполнить как», и попробуйте снова.

Это никуда не денется быстро :(

Wokket
источник
1) Должны ли они запускать пакеты через, create_execution т. Е. Нужно ли им указывать параметры при выполнении для их «сценария готовности данных?» 2) Можно предположить, что вы не заинтересованы в том, чтобы поместить их в роль ssis_admin?
billinkc
1) Я использую, create_executionпотому что мне нужно передать параметр (одно из трех значений) из sproc в задание. Я счастлив иметь три sprocs / jobs и т. Д., Если это решит это. 2) Если ssis_admin - это роль с наименьшими привилегиями, которая позволяет мне быть там, я открыт для нее ... это лучше, чем sysadmin, по крайней мере, и решает их случайным удалением / уничтожением таблиц хранилища в общем использовании.
Wokket
ssis_adminРоль позволит им запускать пакеты SSIS (в прок проверить на членство в системного администратора или ssis_admin роли) , но я думаю , что это будет работать , как и они , и , следовательно , не в состоянии делать резервное копирование и тому подобное. (Я должен был проверить это наверняка, никогда не вспомню, работает ли он как они или учетная запись службы SQL Server). Тем не менее, членство в ssis_admin позволяет им развертывать пакеты и использовать конфигурации, которые могут или не могут быть полезными. 2016 дает нам более детализированные роли, но, очевидно, здесь не так уж много пользы
billinkc
Я думаю, что наименьший риск будет иметь 3 задания с жестким кодом, которые используют правильную комбинацию учетных данных пользователя / учетной записи для достижения наименее привилегированного состояния. Затем я хотел бы либо предоставить этим пользователям возможность запускать задания, либо EXECUTE ASзапретить их , создать три процесса, которые позволят им запускать определенные задания sp_start_job. Говорит случайный интернет-парень, который ужасен в безопасности
billinkc
@billinkc Я думаю, что ssis_operator сделал бы
Том V - попробуйте topanswers.xyz

Ответы:

2

Для потомков я получил эту работу через следующее:

  • Изменение хранимой процедуры, вызываемой users ( Admin.RunImport), на «Execute as» для учетной записи, используемой службой SQL
  • Учетная запись службы SQL Server (управляемая учетная запись службы AD) изменена, чтобы иметь разрешения для выполнения sproc администратора, позволяющие использовать execute asвыше
  • Учетная запись службы SQL Server изменена, чтобы иметь роли ssisdb.ssis_admin и msdb.SQlAgentOperator.
  • Эта Admin.RunImportхранимая процедура ставит в очередь одно из 3 заданий агента, используя sp_start_jobзависящий от переданного параметра
    • Это перенаправление через агент SQL требуется для обхода описанной выше ошибки контекста безопасности ssis.
    • Задания агента принадлежат 'sa' и просто выполняют базовую хранимую процедуру ( Raw.hp_Execute_Import_Impl), передавая разные параметры для каждого задания.
    • Это означает, что задание агента выполняется в saсоответствии с приведенной выше привилегией ssis_admin, так же, как и запланированные задания.
  • В Raw.hp_Execute_Import_Implхранимых процедурах очередь ЕРИП пакет как saтакие же , как обычно.

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

Спасибо за помощь, ребята!

Wokket
источник
2
Спасибо, что вернулись и опубликовали решение. Теперь, когда у вас снова возникла эта проблема, и вы забыли, что сделали, вы можете искать в Интернете, и вы найдете свое собственное решение!
Nick.McDermaid