Krok zadania SQL działa jako inne konto SQL

11

Jestem ciekawy, jak skonfigurować krok zadania SQL, który będzie wykonywany jako inne konto logowania SQL. Wygląda na to, że muszę założyć nowe konto proxy, które wymaga istniejącego poświadczenia. Podczas tworzenia poświadczenia moją jedyną opcją jest użycie poświadczenia logowania do systemu Windows.

Zadanie, które próbuję uruchomić, jest poniżej. Istnieją inne dodatkowe instrukcje, ale gdy ustawię krok zadania, aby działał jako login SQL, nie powiedzie się.

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;

Uruchomienie tego kroku zadania SQL kończy się niepowodzeniem.

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.

Nie jestem pewien, dlaczego próbuje uzyskać dostęp do zdalnego serwera, gdy wszystkie te tabele istnieją w lokalnej bazie danych.

Geoff Dawdy
źródło
Krok zadania SQL ma już połączenie z instancją SQL. Musisz więc zmienić istniejący kontekst bezpieczeństwa, zamiast nawiązywać nowe połączenie za pomocą hasła. Jeśli chcesz utworzyć nowe połączenie, możesz użyć polecenia sqlcmd lub skryptu PowerShell, który może następnie użyć loginu SQL i hasła jako parametrów w skrypcie. Ale powinieneś zastanowić się, co musisz zrobić i czy wystarczą przechowywane procedury z własnym kontekstem.
Rob Farley,

Odpowiedzi:

15

Jeśli konfigurujesz krok zadania T-SQL, przejdź do strony Zaawansowane i skonfiguruj „Uruchom jako użytkownik” na wybrany przez siebie login. wprowadź opis zdjęcia tutaj

Jeśli pracujesz z innymi typami zadań, takimi jak PowerShell, konieczne będzie skonfigurowanie konta proxy.


źródło
Próbowałem tego, ale teraz zadanie kończy się niepowodzeniem, mówiąc: „Odmowa dostępu do zdalnego serwera, ponieważ bieżący kontekst bezpieczeństwa nie jest zaufany”. Jeśli jednak uruchomię skrypt, gdy jestem zalogowany jako użytkownik, będzie mógł go uruchomić dobrze. W zapytaniu nie ma serwera połączonego, więc nie rozumiem, dlaczego odnosi się do zdalnego serwera. jakieś pomysły?
Geoff Dawdy
Jeśli możesz dodać do pytania, co stara się wykonać praca, a dokładny błąd pomoże nam wskazać rozwiązanie.
W moim przypadku zignorowałem to ustawienie. Korzystanie z SQL 2012.
Miguel Sv
1

Użyj EXECUTE ASna początku lub utwórz procedurę przechowywaną, która będzie wykonywana w określonym kontekście.

Rob Farley
źródło
To może być złe. Jeśli chcesz wywołać procedurę składowaną z ograniczonym użytkownikiem, może ZWRÓCIĆ uprawnienia sysadmin (lub właściciela zadania). Obejściem byłoby użycie pliku cookie.
Jens W.,
Procedura składowana utworzona za pomocą opcji EXECUTE AS obsłuży eskalację uprawnień i nie pozwoli komuś na zmianę w części. Jeśli nie ma zapisanego proc, dostępne jest podszywanie się pod inny login, podobnie jak w przypadku EXECUTE AS na początku skryptu.
Rob Farley,