MS SQL Задание, выполняющее хранимую процедуру на связанном сервере с windows auth - PullRequest
1 голос
/ 08 января 2020

У меня есть сервер SRV01 с установкой SQLSRV01 и базой данных SQLDB01. На этом сервере у меня установлена ​​SQL служба агента сервера, работающая под windows учетной записью SQLAgent (изменить нельзя). Также я настроил связанный сервер с SQLSRV02, расположенным на машине SRV02, которая использует текущий контекст безопасности для аутентификации. Я получил windows пользователя DOMAIN \ IntegrationUser01, который имеет доступ к обеим базам данных на обоих серверах. Затем я создал простую хранимую процедуру, которая считывает данные из удаленной таблицы и записывает их в локальную (проверено и работает, когда я вхожу в SQLSRV01 как IntegrationUser01). В конце я настроил задание на выполнение этой хранимой процедуры. Я установил DOMAIN \ IntegrationUser01 как владельца JOB, а также как пользователя для запуска step как (Step -> Properties -> Advenced -> Run as).

Это не работает. Выполнение задания заканчивается с исключением:

Связанные серверы не могут использоваться под олицетворением без сопоставления для олицетворенного имени входа.

Как я понимаю, учетная запись SQLAgent на первом этапе олицетворяет себя как IntegrationUser01 для запуска JOB, а затем должен иметь возможность делегировать эти учетные данные через связанный сервер для SRV02 для аутентификации. Поскольку нет протокола Kerberos для обработки 2-го h oop, он ищет отображение на SQL пользователя на сервере SQLSRV02, которого не существует.

Есть ли возможность настроить такую ​​архитектуру без Kerberos? или я просто что-то не так делаю?

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Я нашел решение и использовал SQL Прокси агента сервера. К сожалению, это не работает с T- SQL JOB Steps, но обходной путь очень прост.

1.) Вам нужно сохранить учетные данные DOMAIN \ IntegrationUser01 windows (Internal_SQL_Credential_Name в scr ниже) в SQL Сервер (Безопасность -> Учетные данные)

2.) Вы настроили прокси в SQL Узел агента сервера для подсистемы CmdExe (Internal_SQL_Proxy_Name в scr ниже) и укажите его для созданных учетных данных.

3.) Для прокси вы добавляете основной логин. Поскольку это sql windows auth, вы выбираете «DOMAIN \ IntegrationUser01»

4.) Вы меняете тип шага на: CmdExe и запускаете как: Internal_SQL_Proxy_Name (по умолчанию это SQL Учетная запись службы агента сервера ).

5.) В качестве команды, которую вы настроили: SQLCMD -Q "EXE C DataBaseName.SchemaName.StoredProcedure" -E -S имя_сервера

Credentials Proxy JOB

0 голосов
/ 08 января 2020

Попробуйте одно из следующих решений, если это возможно:

1) предоставьте доступ к вашей SQL учетной записи службы агента на связанном сервере

2) Перейти к объекту сервера> связанные серверы> выберите сервер & go в свойствах> на вкладке безопасности укажите имя пользователя с правами доступа на связанном сервере.

...