Freigeben über


SSIS-Paket kann nicht ausgeführt werden, wenn es aus einem SQL Server-Agent-Auftragsschritt aufgerufen wird

Dieser Artikel hilft Ihnen beim Beheben des Problems, das auftritt, wenn Sie ein SSIS-Paket aus einem SQL Server-Agent Auftragsschritt aufrufen.

Ursprüngliche Produktversion: SQL Server
Ursprüngliche KB-Nummer: 918760

Problembeschreibung

Wenn Sie ein Microsoft SQL Server Integration Services (SSIS)-Paket aus einem SQL Server-Agent Auftragsschritt aufrufen, wird das SSIS-Paket nicht ausgeführt. Wenn Sie das SSIS-Paket jedoch nicht ändern, wird es erfolgreich außerhalb SQL Server-Agent ausgeführt.

Lösung

Verwenden Sie eine der folgenden Methoden, um das Problem zu beheben. Die am besten geeignete Methode hängt von der Umgebung und dem Grund ab, warum das Paket fehlgeschlagen ist. Gründe, aus denen das Paket möglicherweise fehlgeschlagen ist, sind wie folgt:

  • Das Benutzerkonto, das zum Ausführen des Pakets unter SQL Server-Agent verwendet wird, unterscheidet sich vom ursprünglichen Paketautor.
  • Das Benutzerkonto verfügt nicht über die erforderlichen Berechtigungen, um Verbindungen herzustellen oder auf Ressourcen außerhalb des SSIS-Pakets zuzugreifen.

Das Paket kann in den folgenden Szenarien nicht ausgeführt werden:

  • Der aktuelle Benutzer kann geheime Schlüssel aus dem Paket nicht entschlüsseln. Dieses Szenario kann auftreten, wenn sich das aktuelle Konto oder das Ausführungskonto vom ursprünglichen Paketautor unterscheidet, und die Einstellung der ProtectionLevel-Eigenschaft des Pakets lässt den aktuellen Benutzer geheime Schlüssel im Paket nicht entschlüsseln.
  • Eine SQL Server-Verbindung, die integrierte Sicherheit verwendet, schlägt fehl, da der aktuelle Benutzer nicht über die erforderlichen Berechtigungen verfügt.
  • Der Dateizugriff schlägt fehl, da der aktuelle Benutzer nicht über die erforderlichen Berechtigungen zum Schreiben in die Dateifreigabe verfügt, auf die der Verbindungs-Manager zugreift. Dieses Szenario kann beispielsweise bei Textprotokollanbietern auftreten, die keine Anmeldung und ein Kennwort verwenden. Dieses Szenario kann auch bei jeder Aufgabe auftreten, die vom Dateiverbindungs-Manager abhängig ist, z. B. einer SSIS-Dateisystemaufgabe.
  • Eine registrierungsbasierte SSIS-Paketkonfiguration verwendet die HKEY_CURRENT_USER Registrierungsschlüssel. Die HKEY_CURRENT_USER Registrierungsschlüssel sind benutzerspezifisch.
  • Eine Aufgabe oder ein Verbindungsmanager erfordert, dass das aktuelle Benutzerkonto über die richtigen Berechtigungen verfügt.

Verwenden Sie zum Beheben des Problems die folgenden Methoden:

  • Methode 1: Verwenden sie ein SQL Server-Agent Proxykonto. Erstellen Sie ein SQL Server-Agent Proxykonto. Dieses Proxykonto muss eine Anmeldeinformation verwenden, mit der SQL Server-Agent den Auftrag als Konto ausführen kann, das das Paket erstellt hat, oder als Konto mit den erforderlichen Berechtigungen.

    Diese Methode funktioniert, um geheime Schlüssel zu entschlüsseln und die wichtigsten Anforderungen des Benutzers zu erfüllen. Diese Methode kann jedoch nur eingeschränkt erfolgreich sein, da die SSIS-Paketbenutzerschlüssel den aktuellen Benutzer und den aktuellen Computer umfassen. Wenn Sie das Paket daher auf einen anderen Computer verschieben, schlägt diese Methode möglicherweise immer noch fehl, auch wenn der Auftragsschritt das richtige Proxykonto verwendet.

  • Methode 2: Legen Sie die SSIS Package-Eigenschaft ProtectionLevel auf ServerStorage fest. Ändern Sie die SSIS Package ProtectionLevel-Eigenschaft in ServerStorage. Diese Einstellung speichert das Paket in einer SQL Server-Datenbank und ermöglicht die Zugriffssteuerung über SQL Server-Datenbankrollen.

  • Methode 3: Legen Sie die SSIS-Paketeigenschaft ProtectionLevel auf EncryptSensitiveWithPassword. Ändern Sie die SSIS Package-Eigenschaft ProtectionLevel in EncryptSensitiveWithPassword. Diese Einstellung verwendet ein Kennwort für die Verschlüsselung. Anschließend können Sie die Befehlszeile des SQL Server-Agent Auftragsschritts ändern, um dieses Kennwort einzuschließen.

  • Methode 4: Verwenden von SSIS-Paketkonfigurationsdateien. Verwenden Sie SSIS-Paketkonfigurationsdateien, um vertrauliche Informationen zu speichern und diese Konfigurationsdateien dann in einem gesicherten Ordner zu speichern. Anschließend können Sie die ProtectionLevel Eigenschaft DontSaveSensitive so ändern, dass das Paket nicht verschlüsselt ist und nicht versucht, geheime Schlüssel im Paket zu speichern. Wenn Sie das SSIS-Paket ausführen, werden die erforderlichen Informationen aus der Konfigurationsdatei geladen. Stellen Sie sicher, dass die Konfigurationsdateien angemessen geschützt sind, wenn sie vertrauliche Informationen enthalten.

  • Methode 5: Erstellen einer Paketvorlage. Erstellen Sie für eine langfristige Auflösung eine Paketvorlage, die eine Schutzebene verwendet, die sich von der Standardeinstellung unterscheidet. Dieses Problem tritt in zukünftigen Paketen nicht auf.

Schritte zum Reproduzieren des Problems

  1. Melden Sie sich als Benutzer an, der nicht Teil der SQLServerSQLAgentUser-Gruppe ist. Sie können beispielsweise einen lokalen Benutzer erstellen.
  2. Erstellen Sie ein SSIS-Paket, und fügen Sie dann eine ExecuteSQL-Aufgabe hinzu. Verwenden Sie einen OLE DB-Verbindungs-Manager für die lokale msdb-Datei mithilfe der folgenden Zeichenfolge: 'Windows Authentication' -SQLSourceType: "Direct Input" -SQLStatement: "sp_who"
  3. Führen Sie das Paket aus, um sicherzustellen, dass es erfolgreich ausgeführt wird.
  4. Die ProtectionLevel-Eigenschaft ist auf EncryptSensitiveWithPassword festgelegt.
  5. Erstellen Sie einen SQL Server-Agent Auftrag und einen Auftragsschritt. Klicken Sie in der Liste "Ausführen unter" auf SQL Server-Agent Dienst, um den Auftragsschritt auszuführen. Der Text im SQL Server-Agent Auftragsverlauf zeigt Informationen an, die wie folgt aussehen:

Entschlüsseln geheimer Paketschlüssel

Die Standardeinstellung für die SSIS-Paketeigenschaft ProtectionLevel lautet EncryptSensitiveWithUserKey. Wenn das Paket gespeichert wird, verschlüsselt SSIS nur die Teile des Pakets, die Eigenschaften enthalten, die gekennzeichnet sensitivesind, z. B. Kennwörter, Benutzernamen und Verbindungszeichenfolge s. Daher muss der aktuelle Benutzer beim erneuten Laden des Pakets die Verschlüsselungsanforderungen erfüllen, damit die sensitive Eigenschaften entschlüsselt werden. Der aktuelle Benutzer muss jedoch nicht die Verschlüsselungsanforderungen erfüllen, um das Paket zu laden. Wenn Sie das Paket über einen SQL Server-Agent Auftragsschritt ausführen, ist das Standardkonto das SQL Server-Agent Dienstkonto. Dieses Standardkonto ist höchstwahrscheinlich ein anderer Benutzer als der Paketautor. Daher kann der SQL Server-Agent Auftragsschritt laden und mit der Ausführung des Auftragsschritts beginnen, aber das Paket schlägt fehl, da keine Verbindung hergestellt werden kann. Beispielsweise kann das Paket keine OLE DB-Verbindung oder eine FTP-Verbindung abschließen. Das Paket schlägt fehl, da sie die Anmeldeinformationen nicht entschlüsseln kann, die sie zum Herstellen einer Verbindung benötigen.

Wichtig

Berücksichtigen Sie den Entwicklungsprozess und die Umgebung, um zu bestimmen, welche Konten benötigt und auf jedem Computer verwendet werden. Die EncryptSensitiveWithUserKey-Einstellung der ProtectionLevel Eigenschaft ist eine leistungsstarke Einstellung. Diese Einstellung sollte nicht diskontiert werden, da sie zuerst zu Bereitstellungskomplikationen führt. Sie können die Pakete verschlüsseln, wenn Sie beim entsprechenden Konto angemeldet sind. Sie können auch das Dtutil.exe SSIS-Eingabeaufforderungsprogramm verwenden, um die Schutzebenen mithilfe einer .cmd Datei und des SQL Server-Agent Befehlssubsystems zu ändern. Führen Sie z. B. die folgenden Schritte aus. Da Sie das Hilfsprogramm Dtutil.exe in Batchdateien und Schleifen verwenden können, können Sie diese Schritte für mehrere Pakete gleichzeitig ausführen.

  1. Ändern Sie das Paket, das Sie mithilfe eines Kennworts verschlüsseln möchten.

  2. Verwenden Sie das hilfsprogramm Dtutil.exe über ein Betriebssystem (cmd Exec) SQL Server-Agent Auftragsschritt, um die ProtectionLevel Eigenschaft in EncryptSensitiveWithUserKeyzu ändern. Dieser Vorgang umfasst das Entschlüsseln des Pakets mithilfe des Kennworts und das erneute Verschlüsseln des Pakets. Der Benutzerschlüssel, der zum Verschlüsseln des Pakets verwendet wird, ist die SQL Server-Agent Auftragsschritteinstellung in der Liste "Ausführen unter".

    Notiz

    Da der Schlüssel den Benutzernamen und den Computernamen enthält, kann die Auswirkung des Verschiebens der Pakete auf einen anderen Computer eingeschränkt sein.

Stellen Sie sicher, dass Sie detaillierte Fehlerinformationen zum SSIS-Paketfehler haben.

Anstatt sich auf die eingeschränkten Details im SQL Server-Agent Auftragsverlauf zu verlassen, können Sie die SSIS-Protokollierung verwenden, um sicherzustellen, dass Fehlerinformationen zum SSIS-Paketfehler vorliegen. Sie können das Paket auch mithilfe des Befehls "Subsystem exec" anstelle des SSIS-Subsystembefehls ausführen.

Informationen zur SSIS-Protokollierung

Mit SSIS-Protokollierungs- und Protokollanbietern können Sie Details zur Paketausführung und zu Fehlern erfassen. Standardmäßig protokolliert das Paket keine Informationen. Sie müssen das Paket so konfigurieren, dass Informationen protokolliert werden. Wenn Sie das Paket zum Protokollieren von Informationen konfigurieren, werden detaillierte Informationen angezeigt, die etwa wie folgt aussehen. In diesem Fall wissen Sie, dass es sich um ein Berechtigungsproblem handelt:

OnError,DOMAINNAME,DOMAINNAME\USERNAME,FTP Task,{C73DE41C-D0A6-450A-BB94-DF6D913797A1},{2F0AF5AF-2FFD-4928-88EE-1B58EB431D74},4/28/2006 1:51:59 PM,4/28/2006 1:51:59 PM,-1073573489,0x,Unable to connect to FTP server using "FTP Connection Manager".
OnError,DOMAINNAME,DOMAINNAME\USERNAME,Execute SQL Task,{C6C7286D-57D4-4490-B12D-AC9867AE5762},{F5761A49-F2F9-4575-9E2B-B3D381D6E1F3},4/28/2006 4:07:00 PM,4/28/2006 4:07:00 PM,-1073573396,0x,Failed to acquire connection "user01.msdb". Connection may not be configured correctly or you may not have the right permissions on this connection.

Informationen zum Befehl und zur Ausgabe des Exec-Subsystems

Mithilfe des Befehlsansatzes des Exec-Subsystems fügen Sie ausführliche Konsolenprotokollierungsoptionen zur SSIS-Befehlszeile hinzu, um die ausführbare Datei Dtexec.exe SSIS aufzurufen. Darüber hinaus verwenden Sie das Feature "Erweiterter Auftrag" der Ausgabedatei. Sie können auch die Option "Schrittausgabe einschließen" in der Verlaufsoption verwenden, um die Protokollierungsinformationen an eine Datei oder an den SQL Server-Agent Auftragsverlauf umzuleiten.

Im Folgenden sehen Sie ein Beispiel für eine Befehlszeile:

 dtexec.exe /FILE "C:\_work\SSISPackages\ProtectionLevelTest\ProtectionLevelTest\AgentTesting.dtsx" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING V /CONSOLELOG NCOSGXMT

Die Konsolenprotokollierung gibt Details zurück, die wie folgt aussehen:

Error: 2006-04-27 18:13:34.76 Code: 0xC0202009 Source: AgentTesting Connection manager "(local).msdb" Description: An OLE DB error has occurred. Error code: 0x80040E4D. An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E4D Description: "Login failed for user 'DOMAINNAME\username'.". End Error
Error: 2006-04-28 13:51:59.19 Code: 0xC0016016 Source: Description: Failed to decrypt protected XML node "DTS:Property" with error 0x80070002 "The system cannot find the file specified.". You may not be authorized to access this information. This error occurs when there is a cryptographic error. Verify that the correct key is available. End Error
Log: Name: OnError Computer: COMPUTERNAME Operator: DOMAINNAME\username Source Name: Execute SQL Task Source GUID: {C6C7286D-57D4-4490-B12D-AC9867AE5762} Execution GUID: {7AFE3D9E-5F73-42F0-86FE-5EFE264119C8} Message: Failed to acquire connection "(local).msdb". Connection may not be configured correctly or you may not have the right permissions on this connection. Start Time: 2006-04-27 18:13:34 End Time: 2006-04-27 18:13:34 End Log

References

Leider wissen Benutzer nicht, dass die Standardeinstellungen für agent-Auftragsschritte sie in diesen Zustand versetzen. Weitere Informationen zu SQL Server-Agent Proxys und SSIS finden Sie in den folgenden Themen in SQL Server 2005 Books Online:

  • Planen der Paketausführung in SQL Server-Agent
  • Erstellen SQL Server-Agent Proxys