it-swarm.com.de

Welche Benutzeranmeldeinformationen verwendet Integration Services Catalog zum Ausführen von Paketen?

Wir haben ein SSIS-Paket, das Textdateien aus einem freigegebenen Netzwerkverzeichnis liest. Wenn ich dieses Paket in SSDT ausführe, funktioniert es gut. Wenn wir das Projekt jedoch in Integration Services Catalog implementieren und versuchen, dasselbe Paket von dort aus auszuführen, wird eine Fehlermeldung angezeigt, die angibt, dass der Zugriff auf das Verzeichnis verweigert wird.

Ich hatte immer den Eindruck, dass ich, wenn ich mich an der Datenbank anmelde und ein SSIS-Paket aus dem Integration Services-Katalog ausführte, MEINE Benutzeranmeldeinformationen verwendet und somit Zugriff auf das betreffende Verzeichnis haben würde, da mein Benutzerprofil Zugriff darauf hat .

Ist das nicht der Fall? Verwendet SQL Server einen anderen Benutzer, um Pakete aus dem IS - Katalog auszuführen? Gibt es eine Option für run as another user? Jede Eingabe wird geschätzt.

30
JohnnyLaw

Paketausführungen:

SQL Server-Datentools:

Benutzeranmeldeinformationen, unter denen SQL Server Data Tools (SSDT) ausgeführt wird, werden zum Ausführen der Pakete verwendet, die in SSDT ausgeführt werden.

Wenn Sie unter Windows Start\Alle Programme\Microsoft SQL Server 2012 auf SQL Server-Datentools klicken, wird es unter Ihren Anmeldeinformationen ausgeführt. Um unter einem anderen Benutzerkonto zu laufen, können Sie drücken Ctrl + Shift um Run as different user auszuwählen.

Execute package from SSDT

Integrationskatalog-Services:

Wenn Sie mit der rechten Maustaste auf ein Paket unter Integration Services Catalog \ SSISDB \ <Folder name> \ Projects \ <Project name> \ Packages \ <Package name> klicken und _Execute..._ auswählen, um ein Paket auszuführen. Das Paket wird unter den Anmeldeinformationen ausgeführt, die zum Herstellen einer Verbindung mit SQL Server Management Studio verwendet werden.

Beachten Sie, dass beim Versuch, ein Paket mithilfe der SQL Server-Authentifizierung auszuführen, die folgende Fehlermeldung angezeigt wird:

Der Vorgang kann nicht von einem Konto gestartet werden, das die SQL Server-Authentifizierung verwendet. Starten Sie den Vorgang mit einem Konto, das die Windows-Authentifizierung verwendet.

Execute

Nachdem Sie _Execute..._ gedrückt haben, dreht _SQL Server_ einen Prozess _ISServerExec.exe_, der einen _Console Window Host_ -Prozess startet:

Under SSIS Catalog execution hood

_ISServerExec.exe_ ist ein Programm, das Pakete im SSIS-Katalog ausführt. In diesem Fall wird es unter demselben Benutzer gestartet, der ein SSIS-Paket von SQL Server Management Studio ausführt.

SQL Server-Agent-Auftrag ohne Proxy:

Wenn Sie ein SSIS-Paket in einem SQL Server-Agentenjob ausführen, wird der Jobschritt standardmäßig unter SQL Server Agent Service Account ausgeführt. . Der dem Benutzerkonto zugeordnete SQL Server-Agentendienst kann durch Navigieren zu Windows Start \ Administrative Tools \ Services, Suchen nach dem Dienst SQL Server-Agent (_Your Instance Name_) und Suchen nach dem Benutzer gefunden werden Konto aufgeführt unter Log On As

SQL Server Agent-Auftrag mit Proxy:

Sie können auch einen SQL Server-Agent-Auftrag mit anderen Anmeldeinformationen ausführen, indem Sie ein Proxy-Konto erstellen. Wenn Jobschritte unter einem Proxy-Konto ausgeführt werden, wird das Paket im Jobschritt unter dem auf dem Proxy-Konto angegebenen Berechtigungsnachweis ausgeführt.

Die unten stehende SO Antwort enthält schrittweise Anweisungen zum Erstellen eines Proxy-Kontos zum Ausführen von SQL Server-Agent-Jobs.

Wie erstelle ich in meinem SQL Server-Agent-Job einen Schritt, in dem mein SSIS-Paket ausgeführt wird?

So überprüfen Sie:

Beispielpaket für SSIS 2012:

Hier ist, was ich getan habe, um die obigen Aussagen in Bezug auf die Benutzerkonten zu überprüfen, die für Paketausführungen verwendet werden.

  • Öffnen Sie die SQL Server-Datentools und erstellen Sie ein SSIS 2012-Paket mit dem Namen SO_15289442.dtsx.

  • Erstellen Sie eine Variable mit dem Namen ExecutionUser vom Datentyp String. Weisen Sie der Variablen den Ausdruck _@[System::UserName]_ zu. UserName ist eine Systemvariable, die die Informationen des Benutzers bereitstellt, der das Paket ausführt.

  • Ziehen Sie Send Mail Task per Drag & Drop auf die Registerkarte Data Flow .

  • Erstellen Sie eine SMTP-Verbindung und weisen Sie sie dem SmtpConnection auf der Seite Send Mail Task Editor - Mail zu.

  • Geben Sie die E-Mail-Adressen From und To an.

  • Ändern Sie den MessageSourceType in Variable.

  • Setzen Sie MessageSource auf User::ExecutionUser.

  • Klicken Sie mit der rechten Maustaste auf das Paket und wählen Sie Bereitstellen, um das Projekt in Integration Services Catalog bereitzustellen, das auf einem Server Ihrer Wahl verfügbar ist.

Paketausführungen

  • Führen Sie das Paket in SSDT aus.

  • Öffnen Sie SSDT mit der Option Als anderer Benutzer ausführen. Geben Sie einen anderen Berechtigungsnachweis als Ihren an und führen Sie das Paket erneut aus.

  • Führen Sie das Paket aus dem Integration Services-Katalog aus.

  • Erstellen Sie einen SQL Server-Agent-Auftrag, um das Paket mit dem SQL Server-Agent-Dienstkonto auszuführen.

  • Erstellen Sie einen SQL Server-Agent-Auftrag, um das Paket mit einem Proxy-Konto auszuführen.

Für jede oben genannte Ausführung erhalten Sie eine E-Mail mit dem Benutzerkonto, mit dem das Paket ausgeführt wurde.

Ihr Problem:

In Ihrem Fall wird das Paket unter Ihrem Konto ( ausgeführt, vorausgesetzt, Sie verwenden Ihre Anmeldeinformationen für den Zugriff auf SSISDB ), wenn Sie mit der rechten Maustaste klicken und Aus Integration Services-Katalog ausführen auswählen. Stellen Sie sicher, dass das Konto Zugriff auf den Netzwerkpfad hat.

Wenn Sie Ihr Paket in SQL Server Agent Job ausführen, ist das Proxy-Konto die _run as another user_ -Option, nach der Sie suchen.

39
user756519

Es scheint, als hätten Sie Kerberos nicht auf Ihrem SQL Server konfiguriert (Doppel-Hop-Problem). 

Hier ist das Problem, das mit MS protokolliert wurde. Dieses Problem wurde jetzt behoben https://connect.Microsoft.com/SQLServer/feedback/details/767088/with-the-new-ability-to-execute-ssis- Pakete-von-tsql-kerberos-Delegation sollten unterstützt werden

Hier ist ein großartiger Blogbeitrag zu den Details: http://www.sqlscientist.com/2014/01/setup-kerberos-authentication-for-sql.html

Wenn dies konfiguriert ist, können Sie den Job mit einer gespeicherten Prozedur oder einem SSMS auf Ihrem lokalen Computer aus der Ferne starten. Es wird Ihre Anmeldeinformationen übergeben, wenn es richtig konfiguriert ist. Natürlich müssen Sie sicherstellen, dass Sie über die erforderlichen Berechtigungen für den Zugriff auf die Netzwerkressource verfügen.

2
Travis Obrycki

Dies ist ein alter Thread, aber ich stelle mir vor, dass das Problem, das Sie haben, tatsächlich mit dem Pfad zur Datei zusammenhängt. Verwenden Sie einen UNC-Namen oder einen Laufwerksbuchstaben. Ist Ihr Dateipfad also etwa "Z:\Pfad\nach\Datei.csv" oder "\ Server\Freigabe\Pfad\Nach\Datei.csv"?

Wenn es sich um einen Laufwerksbuchstaben handelt, funktioniert es von Ihrem lokalen Computer aus gut, da Sie dieses Laufwerk zugeordnet haben, der Server schlägt jedoch fehl, da der Laufwerkbuchstabe nicht zugeordnet ist.

0
bmg002