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.
quelle
External table is not in the expected format
riecht 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
Antworten:
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:
quelle
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:
quelle