Шаг SQL Job выполняется под другой учетной записью SQL

11

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

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

insert into [dbo].[TableA]
SELECT 
       ss.[Ref_ID]
      ,mm.[studentID]
      ,mm.[studentPersonID]
      ,mm.[studentFirstname]
  FROM [dbo].[TableB] mm
  left outer join [dbo].[TableC] ss on ss.parentPersonID=mm.parentPersonID and mm.studentPersonID = ss.studentPersonID
  where ss.Ref_ID is not null;

Когда это выполняется через шаг задания SQL, происходит сбой.

Executed as user: an_admin_account. Access to the remote server is denied because the current security context is not trusted. [SQLSTATE 42000] (Error 15274).  The step failed.

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

Джефф Доуди
источник
Шаг задания SQL уже имеет соединение с экземпляром SQL. Таким образом, вам нужно изменить существующий контекст безопасности, а не устанавливать новое соединение с паролем. Если вы хотите создать новое соединение, вы можете использовать команду sqlcmd или сценарий PowerShell, который затем может использовать логин и пароль SQL в качестве параметров в сценарии. Но вы должны подумать, что вам нужно сделать, и будет ли достаточно хранимого процесса с его собственным контекстом.
Роб Фарли

Ответы:

15

Если вы настраиваете шаг задания T-SQL, перейдите на страницу «Дополнительно» и настройте «Запуск от имени пользователя» для входа в систему по вашему выбору. введите описание изображения здесь

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


источник
Я пробовал это, но теперь не удается выполнить задание: «Доступ к удаленному серверу запрещен, поскольку текущий контекст безопасности не является доверенным». Однако, если я запускаю сценарий, когда вошел в систему как пользователь, он может запустить его просто отлично. В запросе нет связанного сервера, поэтому я не понимаю, почему он ссылается на удаленный сервер. есть идеи?
Джефф Доуди
Если бы вы могли добавить к своему вопросу, что пытается сделать работа, и точная ошибка поможет нам указать вам решение.
В моем случае он проигнорировал настройку. Использование SQL 2012.
Miguel Sv
1

Используйте EXECUTE ASв начале или создайте хранимую процедуру, которая выполняется в определенном контексте.

Роб Фарли
источник
Это может быть плохо. Если вы хотите вызвать хранимую процедуру с ограниченным пользователем, она может ОБРАТИТЬСЯ к привилегиям sysadmin (или владельца задания). Обходной путь будет использовать cookie.
Йенс В.
Хранимая процедура, созданная с использованием параметра EXECUTE AS, будет обрабатывать повышение привилегий и не позволит кому-либо частично измениться. Если нет доступного хранимого процесса, тогда выдача себя за другого логина поможет, как с EXECUTE AS в начале скрипта.
Роб Фарли