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

In diesem Artikel erfahren Sie, wie Sie das Problem beheben, das beim Aufrufen eines SSIS-Pakets aus einem SQL Server-Agent Auftragsschritt auftritt.

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

Symptome

Wenn Sie ein SSIS-Paket (Microsoft SQL Server Integration Services) aus einem SQL Server-Agent Auftragsschritt aufrufen, wird das SSIS-Paket nicht ausgeführt. Wenn Sie das SSIS-Paket jedoch nicht ändern, wird es außerhalb SQL Server-Agent erfolgreich 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. Die folgenden Gründe für einen Fehler des Pakets sind:

  • 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 keine Geheimnisse aus dem Paket entschlüsseln. Dieses Szenario kann auftreten, wenn sich das aktuelle Konto oder das Ausführungskonto vom ursprünglichen Paketautor unterscheidet und die ProtectionLevel-Eigenschaftseinstellung des Pakets es dem aktuellen Benutzer nicht ermöglicht, Geheimnisse im Paket zu 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 kein Kennwort verwenden. Dieses Szenario kann auch bei jeder Aufgabe auftreten, die vom Dateiverbindungs-Manager abhängig ist, z. B. eine 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 Verbindungs-Manager erfordert, dass das aktuelle Benutzerkonto über die richtigen Berechtigungen verfügt.

Verwenden Sie die folgenden Methoden, um das Problem zu beheben:

  • Methode 1: Verwenden Sie ein SQL Server-Agent Proxykonto. Erstellen Sie ein SQL Server-Agent Proxykonto. Dieses Proxykonto muss Anmeldeinformationen verwenden, mit denen SQL Server-Agent den Auftrag als das Konto ausführen können, das das Paket erstellt hat, oder als Konto, das über die erforderlichen Berechtigungen verfügt.

    Diese Methode entschlüsselt Geheimnisse und erfüllt die wichtigsten Anforderungen des Benutzers. Diese Methode kann jedoch nur eingeschränkt erfolgreich sein, da die Benutzerschlüssel des SSIS-Pakets den aktuellen Benutzer und den aktuellen Computer umfassen. Wenn Sie das Paket auf einen anderen Computer verschieben, schlägt diese Methode möglicherweise trotzdem fehl, auch wenn der Auftragsschritt das richtige Proxykonto verwendet.

  • Methode 2: Legen Sie die SSIS Package-Eigenschaft ProtectionLevel auf ServerStorage fest. Ändern Sie die Eigenschaft SSIS Package ProtectionLevel 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 Package-Eigenschaft ProtectionLevel auf fest EncryptSensitiveWithPassword. Ändern Sie die SSIS-Paketeigenschaft ProtectionLevel in EncryptSensitiveWithPassword. Diese Einstellung verwendet ein Kennwort für die Verschlüsselung. Anschließend können Sie die Befehlszeile SQL Server-Agent Auftragsschritts so ändern, dass sie dieses Kennwort enthält.

  • Methode 4: Verwenden Sie SSIS-Paketkonfigurationsdateien. Verwenden Sie SSIS-Paketkonfigurationsdateien, um vertrauliche Informationen zu speichern, und speichern Sie diese Konfigurationsdateien dann in einem geschützten Ordner. Anschließend können Sie die ProtectionLevel -Eigenschaft in DontSaveSensitive ändern, damit das Paket nicht verschlüsselt ist und nicht versucht, Geheimnisse 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 sie eine Paketvorlage. Erstellen Sie für eine langfristige Lösung eine Paketvorlage, die eine Schutzebene verwendet, die von der Standardeinstellung abweicht. Dieses Problem tritt in zukünftigen Paketen nicht auf.

Schritte zum Reproduzieren des Problems

  1. Melden Sie sich als Benutzer an, der nicht zur Gruppe SQLServerSQLAgentUser gehört. 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, indem Sie die folgende Zeichenfolge verwenden: '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 gesetzt.
  5. Erstellen Sie einen SQL Server-Agent Auftrag und einen Auftragsschritt. Klicken Sie in der Liste Ausführen als auf SQL Server-Agent Dienst, um den Auftragsschritt auszuführen. Der Text im SQL Server-Agent Auftragsverlauf zeigt Informationen an, die den folgenden ähneln:

Entschlüsseln von Paketgeheimnissen

Die Standardeinstellung für die SSIS-Paketeigenschaft ProtectionLevel ist EncryptSensitiveWithUserKey. Wenn das Paket gespeichert wird, verschlüsselt SSIS nur die Teile des Pakets, die gekennzeichnete sensitiveEigenschaften enthalten, z. B. Kennwörter, Benutzernamen und Verbindungszeichenfolgen. Daher muss der aktuelle Benutzer beim erneuten Laden des Pakets die Verschlüsselungsanforderungen für die sensitive zu entschlüsselnden Eigenschaften erfüllen. 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 geladen und gestartet werden, um den Auftragsschritt auszuführen, aber das Paket schlägt fehl, da es keine Verbindung herstellen kann. Beispielsweise kann das Paket keine OLE DB-Verbindung oder ftp-Verbindung abschließen. Das Paket schlägt fehl, da es die Anmeldeinformationen, die es zum Herstellen einer Verbindung benötigen, nicht entschlüsseln kann.

Wichtig

Berücksichtigen Sie den Entwicklungsprozess und die Umgebung, um zu bestimmen, welche Konten auf den einzelnen Computern benötigt und verwendet werden. Die EncryptSensitiveWithUserKey-Einstellung der ProtectionLevel Eigenschaft ist eine leistungsstarke Einstellung. Diese Einstellung sollte nicht rabattiert werden, da sie zunächst zu Komplikationen bei der Bereitstellung führt. Sie können die Pakete verschlüsseln, wenn Sie beim entsprechenden Konto angemeldet sind. Sie können auch das SSIS-Eingabeaufforderungshilfsprogramm Dtutil.exe verwenden, um die Schutzebenen mithilfe einer .cmd-Datei und des SQL Server-Agent Befehlssubsystems zu ändern. Führen Sie beispielsweise 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 verschlüsseln möchten, mithilfe eines Kennworts.

  2. Verwenden Sie das Hilfsprogramm Dtutil.exe über ein Betriebssystem (cmd Exec) SQL Server-Agent Auftragsschritt, um die ProtectionLevel -Eigenschaft in zu EncryptSensitiveWithUserKeyändern. Dieser Prozess umfasst das Entschlüsseln des Pakets mithilfe des Kennworts und die erneute Verschlüsselung des Pakets. Der Benutzerschlüssel, der zum Verschlüsseln des Pakets verwendet wird, ist die Einstellung SQL Server-Agent Auftragsschritts in der Liste Ausführen als.

    Hinweis

    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 über detaillierte Fehlerinformationen zum SSIS-Paketfehler verfügen.

Anstatt sich auf die eingeschränkten Details im SQL Server-Agent Auftragsverlauf zu verlassen, können Sie die SSIS-Protokollierung verwenden, um sicherzustellen, dass Sie über Fehlerinformationen zum SSIS-Paketfehler verfügen. Sie können das Paket auch mithilfe des Befehls exec subsystem 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 den folgenden ähneln. 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

Mit dem exec-Subsystembefehlsansatz fügen Sie der SSIS-Befehlszeile ausführliche Konsolenprotokollierungsschalter hinzu, um die ausführbare Datei Dtexec.exe SSIS-Befehlszeile aufzurufen. Darüber hinaus verwenden Sie das Erweiterte Auftragsfeature der Ausgabedatei. Sie können auch die Option Schrittausgabe in den Verlauf einschließen verwenden, um die Protokollierungsinformationen an eine Datei oder an den SQL Server-Agent Auftragsverlauf umzuleiten.

Es folgt 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 den folgenden ähneln:

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 ist benutzern nicht bewusst, dass die Standardeinstellungen des Agent-Auftragsschritts sie in diesen Zustand versetzen. Weitere Informationen zu SQL Server-Agent Proxys und SSIS finden Sie in den folgenden Themen in der SQL Server 2005-Onlinedokumentation:

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