Der SQL-Jobschritt wird als anderes SQL-Konto ausgeführt

11

Ich bin gespannt, wie man einen SQL-Jobschritt einrichtet, der als anderes SQL-Anmeldekonto ausgeführt wird. Es scheint, dass ich ein neues Proxy-Konto einrichten muss, für das ein vorhandener Berechtigungsnachweis erforderlich ist. Wenn ich einen Berechtigungsnachweis erstelle, kann ich nur einen Windows-Anmeldeinformationsnachweis verwenden.

Der Job, den ich ausführen möchte, ist unten aufgeführt. Es gibt andere zusätzliche Anweisungen, aber wenn ich den Jobschritt so einstelle, dass er als SQL-Anmeldung ausgeführt wird, schlägt er fehl.

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;

Wenn dies durch einen SQL-Jobschritt ausgeführt wird, schlägt dies fehl.

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.

Ich bin mir nicht sicher, warum versucht wird, auf einen Remote-Server zuzugreifen, wenn alle diese Tabellen in der lokalen Datenbank vorhanden sind.

Geoff Dawdy
quelle
Ein SQL-Jobschritt hat bereits eine Verbindung zur SQL-Instanz. Sie müssen also den vorhandenen Sicherheitskontext ändern, anstatt eine neue Verbindung mit einem Kennwort herzustellen. Wenn Sie eine neue Verbindung erstellen möchten, können Sie einen Befehl sqlcmd oder ein PowerShell-Skript verwenden, das dann eine SQL-Anmeldung und ein Kennwort als Parameter im Skript verwendet. Sie sollten sich jedoch überlegen, was Sie tun müssen und ob ein gespeicherter Prozess mit einem eigenen Kontext ausreicht.
Rob Farley

Antworten:

14

Wenn Sie einen T-SQL-Jobschritt konfigurieren, rufen Sie die erweiterte Seite auf und konfigurieren Sie "Als Benutzer ausführen" für das Login Ihrer Wahl. Geben Sie hier die Bildbeschreibung ein

Wenn Sie mit anderen Jobschritttypen wie PowerShell arbeiten, muss ein Proxy-Konto konfiguriert werden.


quelle
Ich habe dies versucht, aber jetzt schlägt der Job fehl und sagt "Zugriff auf den Remote-Server wird verweigert, weil der aktuelle Sicherheitskontext nicht vertrauenswürdig ist". Wenn ich das Skript jedoch ausführe, während ich als Benutzer angemeldet bin, kann es problemlos ausgeführt werden. Die Abfrage enthält keinen Verbindungsserver, daher verstehe ich nicht, warum sie sich auf einen Remoteserver bezieht. Irgendwelche Gedanken?
Geoff Dawdy
Wenn Sie Ihrer Frage hinzufügen könnten, was der Job zu tun versucht, und ein genauer Fehler uns helfen würde, Sie auf eine Lösung hinzuweisen.
In meinem Fall wurde die Einstellung ignoriert. Verwenden von SQL 2012.
Miguel Sv
1

Verwenden Sie diese Option EXECUTE ASzu Beginn oder erstellen Sie eine gespeicherte Prozedur, die in einem bestimmten Kontext ausgeführt wird.

Rob Farley
quelle
Das könnte schlecht sein. Wenn Sie eine gespeicherte Prozedur mit einem eingeschränkten Benutzer aufrufen möchten, kann sie auf die Berechtigungen sysadmin (oder Jobbesitzer) zurückgesetzt werden. Problemumgehung wäre die Verwendung eines Cookies.
Jens W.
Eine gespeicherte Prozedur, die mit der Option EXECUTE AS erstellt wurde, behandelt die Eskalation von Berechtigungen und ermöglicht es niemandem, einen Teil des Durchgangs zu ändern. Wenn kein gespeicherter Prozess verfügbar ist, reicht es aus, sich als ein anderes Login auszugeben, wie bei EXECUTE AS zu Beginn des Skripts.
Rob Farley