SSIS-Proxy / Anmeldeinformationen funktionieren nicht im SQL Agent-Jobschritt


7

Ich habe mich umgesehen und ähnliche Fragen gefunden, aber nichts Spezielles für das, womit ich Probleme habe.

Problem: Ich kann den SSIS-Proxy und die SQL-Anmeldeinformationen nicht richtig konfigurieren, um mich als Dienstkonto mit eingeschränktem Zugriff für einen SQL Agent-Jobschritt auszugeben, in dem ein SSIS-Paket ausgeführt wird. Das Dienstkonto mit eingeschränktem Zugriff verfügt über alle erforderlichen Berechtigungen und das Paket ist korrekt gestaltet. Ich habe viel Material zu diesem Thema gelesen und möchte Hilfe, falls ich etwas verpasst habe.

Hintergrund: (SQL 2012 SP3-Server wird unter Windows Server 2012 R2 ausgeführt. Die SQL-Engine wird unter Domain1 \ Admin1 und der SQL Agent unter Domain1 \ Admin2 ausgeführt. Beide befinden sich ebenfalls in der SYSADMIN-Serverrolle.)

Wir haben ein SSIS-Paket, das einwandfrei funktioniert, wenn es interaktiv von einem SYSADMIN ausgeführt wird, und auch einwandfrei, wenn es innerhalb eines Jobschritts als "SQL Server Agent Service Account" ausgeführt wird. Unsere Sicherheitsgruppe möchte jedoch, dass wir Anmeldeinformationen verwenden, die auf die Aufgaben des Jobs beschränkt sind, und ich verstehe dies ohnehin als bewährte Methode. Alles, was ich gelesen habe, weist darauf hin, dass ein SSIS-Proxy und ein Berechtigungsnachweis zur Lösung dieser Anforderung beitragen. Ich kann die Konfiguration jedoch nicht zum Laufen bringen, daher muss ich etwas falsch machen.

Das Paket wird über den SSIS-Paketjobschritt ausgeführt. Es ist eine lokale Datei und wird nicht in MSDB oder SSISDB bereitgestellt. Das Paket stellt eine Verbindung zu einer Netzwerkfreigabe her, wird in eine Datenbank geladen, die lokal für den SQL Server ist, schneidet eine Tabelle ab, führt einige gespeicherte Prozeduren aus und löscht dann die XLS-Datei. Der Jobschritt ist so eingestellt, dass die 32-Bit-Laufzeit verwendet wird.

Die Sicherheit hat ein Konto (Domain1 \ NewUser) erstellt, das über Änderungsrechte für die Netzwerkfreigabe verfügt. Ich habe auch darum gebeten, Domain1 \ Admin2 als Modify zur gleichen Freigabe hinzuzufügen.

Für die Einrichtung habe ich eine SQL-Anmeldung für Domain1 \ NewUser nur mit der Rolle "Öffentlich" erstellt und diese aufgrund des Aktionsbereichs, den das Paket ausführen muss, als Datenbankbesitzer für die betreffende Datenbank hinzugefügt. Ich habe einen Berechtigungsnachweis (BatchLoad-Berechtigungsnachweis) erstellt, der als Identität das Konto Domain1 \ NewUser und das genaue Arbeitskennwort des Benutzerkontos verwendet. Anschließend habe ich einen SSIS-Proxy (BatchLoad-Proxy) mit dem im SSIS-Paketsubsystem aktiven BatchLoad-Berechtigungsnachweis erstellt und die SQL-Anmeldung für Domain1 \ NewUser als Proxy-Kontoprinzip hinzugefügt. Dann habe ich den SQL Agent-Jobschritt, in dem das SSIS-Paket ausgeführt wird, so geändert, dass er als BatchLoad-Proxy ausgeführt wird, und den Eigentümer des Jobs von Domain1 \ Admin2 in das Konto Domain1 \ NewUser geändert.

Wenn der Job ausgeführt wird, wird folgende Fehlermeldung angezeigt (einige Maskierungen im Protokoll wurden durchgeführt):

Als Benutzer ausgeführt: Domain1 \ NewUser. Microsoft (R) SQL Server-Dienstprogramm zum Ausführen von Paketen Version 11.0.6020.0 für 32-Bit-Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten. Gestartet: 12:46:17 Uhr

Fehler: 2016-06-24 12: 46: 28.56 Code: 0xC0202009 Quelle: xxxxxxx_xxxx Verbindungsmanager "JJJJJJJJ" Beschreibung: SSIS-Fehlercode DTS_E_OLEDBERROR. Ein OLE DB-Fehler ist aufgetreten. Fehlercode: 0x80004005. Ein OLE DB-Datensatz ist verfügbar. Quelle: "Microsoft Office Access-Datenbankmodul" Ergebnis: 0x80004005 Beschreibung: "Externe Tabelle hat nicht das erwartete Format." Fehler beenden

Auch hier funktioniert das Paket einwandfrei, wenn ein SYSADMIN es interaktiv in BIDS ausführt, sodass wir wissen, dass die Datei das richtige Format hat und das Paket in Ordnung ist.

Ich habe keine Berechtigungen für die Netzwerkfreigabe. Wenn ich versuche, eine Verbindung manuell herzustellen, wird ein ähnlicher Fehler angezeigt:

Windows cannot access
\\<path to the network share>
Error code: 0x80004005
Unspecified error

Wenn ich über das Konto und das Kennwort "Domain1 \ NewUser" eine Verbindung zur Netzwerkfreigabe herstelle, kann ich den Ordner "OK" anzeigen, um sicherzustellen, dass das richtige Benutzerkonto Zugriff hat.


3
Tolle erste Frage. Der Fehler External table is not in the expected formatriecht nicht nach einem Berechtigungsproblem, das ich angesichts des Titels erwartet hatte. Sie sagen, es läuft gut mit BIDS, aber das ist für Sie in einem interaktiven Modus. Angesichts der Breite der potenziellen Problemdomäne würde ich zunächst RunAs verwenden , um das SSIS-Paket auf Ihrem Computer (oder dem Server, was auch immer) auszuführen , um festzustellen , ob es sich um ein SQL Agent / Proxy-Problem oder ein Benutzerproblem handelt. Befehl ungefähr"C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\dtexec.exe" /file C:\myPackage.dtsx
billinkc

@billinkc, ich habe auch erwähnt, dass dasselbe Paket einwandfrei ausgeführt wird, wenn es in einem SQL Agent-Job innerhalb eines Jobschritts als "SQL Server Agent-Dienstkonto" ausgeführt wird. Mit anderen Worten, alle Dinge bleiben gleich. Erst wenn ich den Jobschritt so ändere, dass er als neuer Proxy ausgeführt wird, und den Eigentümer des Jobs in Domain1 \ NewUser ändere, schlägt der Job fehl. Wenn ich nur den Jobschritt ändere, schlägt dies fehl, jedoch mit weniger Informationen. Wir haben die offensichtlichen Dinge ausgeschlossen, wie das XLS in einem schlechten Format, in der verwendeten Datei, Berechtigungen für das NewUser-Konto usw. ist. Es scheint mir, dass das einzige Stück der SSIS-Proxy und die Anmeldeinformationen sind ...
GregDBA

Stellen Sie den Jobbesitzer so ein, dass die Gruppe mit den Proxy-Anmeldeinformationen die Agentenjobs verwalten kann? Zeitplan ändern und was nicht.
Jason Cumberland

Ja, ich habe die Gruppe, zu der der Jobbesitzer gehört, zur MSDB.SQLAgentUserRole hinzugefügt. Da es sich bei diesem Domain1 \ NewUser-Konto tatsächlich um ein Batch-Ausführungskonto handelt, besteht keine Bedenken, dass es seinen eigenen Job ändern muss. Ich habe das trotzdem gemacht. Da dies ein Problem mit dem lokalen Benutzerprofil für Excel war, war keine der SQL-Berechtigungen jemals wirklich ein Problem. Ich habe am 23.08. Gepostet, dass der Job gut gelaufen ist, nachdem ich das bemerkt habe. Danke Jason.
GregDBA

Antworten:


2

Ich freue mich über das Feedback dazu und hoffe, dass dies den Menschen in Zukunft hilft. Ich habe schließlich die wahre Ursache des Problems eingegrenzt. Ich hatte nicht genügend Details darüber angegeben, dass eine Excel-Datei verwendet wurde. Wenn ich nach dem Deaktivieren aller Elemente im Paket die Datenflussaufgabe nur mithilfe der Excel-Quelle aktiviert habe, wird der Fehler angezeigt , jedoch nur bei Verwendung des SSIS-Proxys (der den Job über das Konto Domain1 \ NewUser gestartet hat) . Wenn ich den Jobschritt für die Verwendung des SQL Server-Agentenkontos festlegen würde, würde alles gut funktionieren.

Nach einiger Zeit habe ich versucht, mich mit den NewUser1-Anmeldeinformationen beim Server anzumelden, und Excel zum ersten Mal ausgeführt. Es forderte mich zu Initialen auf und dann schloss ich das Programm. Ich hatte das Konto auch der lokalen Administratorgruppe des Servers hinzugefügt, damit ich RDP durchführen konnte.

Dann habe ich den Job mit dem SSIS-Proxy ausgeführt und alles hat gut funktioniert. Wenn ich das Konto aus der lokalen Administratorgruppe entfernte, schlug es erneut fehl, aber ich stellte fest, dass die lokale Richtlinie "Anmeldung als Stapeljob" in dieser Mitgliedschaft gewährt wurde.

Folgendes habe ich aus dieser Erfahrung gelernt:

  1. SQL-Anmeldeinformationen können sich nur als Benutzerkonto ausgeben, NICHT als Gruppe. Der SSIS-Proxy ist eine gültige Lösung zum Gewähren der erforderlichen Berechtigungen für einen Stapeljob. Excel (und möglicherweise andere Anwendungen) müssen möglicherweise einmal mit den zugehörigen Anmeldeinformationen gestartet werden, um die Anwendungseinstellungen im Benutzerprofil auf dem Server abzuschließen. Die Anmeldung als Stapeljob ist für einen Proxy erforderlich, auf dem DTExec ausgeführt wird, um ein Paket über das Dateisystem zu starten. Excel-Quellen sind problematisch, und der OLE DB-Treiber meldet dieses Problem möglicherweise, wenn es sich nicht um ein Layout- / Formatproblem handelt:

Ergebnis: 0x80004005 Beschreibung: "Externe Tabelle hat nicht das erwartete Format."


0

Haben Sie versucht, MS1B (db_owner für Tests) die Berechtigung für Domain1 \ NewUser zu erteilen?

Hier haben Sie einen großartigen Artikel über die SSIS-Proxy-Benutzer: https://www.mssqltips.com/sqlservertip/2163/running-a-ssis-package-from-sql-server-agent-using-a-proxy-account/

Besonders Auszug:

EXEC msdb.dbo.sp_update_proxy 
@proxy_name = N'proxy_name', 
@enabled = 1 

Danke für den Vorschlag. Ja, ich habe diesen und mehrere andere Artikel gelesen, als ich das SSIS-Proxy-Setup durchlaufen habe.
GregDBA
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.