INFO: Ausführen eines DTS-Pakets als geplanter Auftrag

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 269074
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
269074 INF: How to Run a DTS Package as a Scheduled Job
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Ein Problem, das im Zusammenhang mit Data Transformation Services-Paketen (DTS-Paketen) häufig auftritt, besteht darin, dass das DTS-Paket vom SQL Server Enterprise Manager aus fehlerfrei ausgeführt wird, eine Ausführung des DTS-Pakets als geplanter Auftrag jedoch fehlschlägt. Dieses Problem hängt in der Regel damit zusammen, dass der Sicherheitskontext bei einer Ausführung des Pakets als geplanter Auftrag anders sein kann als bei einer interaktiven Ausführung.

Dieser Artikel beschreibt die Sicherheitsprobleme im Zusammenhang mit der Ausführung von DTS-Paketen.

Weitere Informationen

In diesem Artikel werden u.a. die folgenden Begriffe verwendet:
Tabelle minimierenTabelle vergrößern
BegriffeBeschreibung
DTSData Transformation Services
SQL-AuthentifizierungEin Sicherheitssystem, das auf Microsoft SQL Server-Anmeldungen und -Kennwörtern basiert.
StandardsicherheitSiehe "SQL-Authentifizierung"
SQL Server-AuthentifizierungSiehe "SQL-Authentifizierung"
Microsoft Windows NT-AuthentifizierungWenn ein Benutzer über ein Microsoft Windows-Benutzerkonto eine Verbindung herstellt, überprüft SQL Server, ob der Kontoname und das Kennwort überprüft wurden, als sich der Benutzer bei einem Microsoft Windows NT-, Microsoft Windows 2000-, Microsoft Windows 95- oder Microsoft Windows 98-Computer angemeldet hat.
Integrierte SicherheitSiehe "Microsoft Windows NT-Authentifizierung"
Windows NT- oder Microsoft Windows 2000-AuthentifizierungSiehe "Microsoft Windows NT-Authentifizierung"
Microsoft Windows NT-Konto oder -Anmeldung entspricht Windows-Konto oder -AnmeldungIst gleichbedeutend mit Microsoft Windows NT-Anmeldekonto oder Microsoft Windows 2000-Anmeldekonto.
SQL-AgentDer Dienst "SQL Server-Agent"
SEMSQL Server Enterprise Manager

Wo wird das DTS-Paket ausgeführt?

Ein Problem, das im Zusammenhang mit DTS-Paketen häufig auftritt, ist das unterschiedliche Verhalten bei der Ausführung eines Pakets vom SQL Enterprise Manager gegenüber der Ausführung des Pakets als geplanter Auftrag. Wenn Sie das Paket aus dem DTS-Designer im SQL Enterprise Manager (SEM) ausführen, wird es auf dem Computer ausgeführt, an dem Sie gerade arbeiten. Wenn Sie am Server arbeiten (entweder physisch anwesend oder über eine Remotezugriffssoftware), wird das Paket auf dem Server ausgeführt. Wenn Sie an einer Arbeitsstation arbeiten und den SQL-Server im Enterprise Manager registriert haben, wird das Paket auf dieser Arbeitsstation ausgeführt. Der Sicherheitskontext des Pakets ist in diesem Fall der des Windows NT-Kontos, das Sie für die Anmeldung bei diesem Computer verwendet haben. Bei einer Ausführung als geplanter Auftrag wird das Paket immer auf dem Server ausgeführt.

Häufig erstellt und testet ein Entwickler das DTS-Paket interaktiv auf seiner Arbeitsstation über den DTS Designer im Enterprise Manager. Nach dem Debuggen wird das DTS-Paket dann als Auftrag eingeplant. Dadurch ist der Speicherort des Pakets nicht mehr die Arbeitsstation des Entwicklers, sondern der Server. Falls das Paket Textdaten in SQL Server geladen hat, schlägt die Ausführung des Pakets fehl, sofern die Textdatei und der Pfad zu dieser Datei auf dem Server nicht vorhanden sind. Wird für das Paket eine Verbindung zu einem anderen Server hergestellt, schlägt die Ausführung des Pakets fehl, wenn der für den Auftrag geltende Sicherheitskontext die Verbindung nicht unterstützt.

Wer ist der Besitzer des Auftrags, der das DTS-Paket ausführt?

Pakete werden eingeplant, indem man einen Auftrag erstellt, der durch den SQL-Agenten verwaltet wird. Dieser Auftrag hat ? wie jeder geplante Auftrag ? einen "Besitzer". Dabei kann es sich entweder um eine SQL Server-Anmeldung oder ein Windows NT-Konto handeln.

Gehen Sie folgendermaßen vor, um den Besitzer zu ermitteln:
  • Doppelklicken Sie im Enterprise Manager auf den Auftrag, und sehen Sie sich dann den Eintrag im Dropdown-Kombinationsfeld Besitzer an.

    -oder-

  • Führen Sie die gespeicherte Systemprozedur msdb.dbo.sp_help_job aus.
SQL Server 7.0

Der Sicherheitskontext für die Ausführung des Auftrags wird durch den jeweiligen Besitzer bestimmt. Wenn es sich bei dem Besitzer um ein Anmeldekonto handelt, das nicht Mitglied der Serverrolle Sysadmin ist, wird das Paket im Kontext und mit den Berechtigungen des Kontos SQLAgentCmdExec ausgeführt.

Damit SQLAgentCmdExec einen Auftrag ausführen kann, der eine Verbindung zu SQL Server herstellt, muss das Konto SQLAgentCmdExec über die entsprechenden Windows-/NT-Berechtigungen verfügen und sich bei SQL Server mit den erforderlichen Datenbankberechtigungen anmelden können. Das Konto SQLAgentCmdExec verfügt im Allgemeinen über keinerlei Berechtigungen außerhalb des lokalen SQL Server-Computers. Deshalb schlägt jede Paketausführung fehl, für die eine Verbindung zu einem anderen Computer erforderlich ist, wenn es sich um einen geplanten Auftrag im Besitz einer Anmeldung handelt, deren Besitzer nicht Mitglied der Rolle "Sysadmin" ist.

SQL Server 2000

Der Sicherheitskontext für die Ausführung des Auftrags wird durch den jeweiligen Besitzer bestimmt. Wenn es sich bei dem Besitzer des Auftrags um ein Anmeldekonto handelt, das nicht Mitglied der Serverrolle Sysadmin ist, wird das Paket im Kontext und mit den Berechtigungen des Kontos ausgeführt, das als Proxykonto des SQL-Agenten konfiguriert ist.

Damit das Proxykonto für den SQL-Agenten einen Auftrag ausführen kann, der eine Verbindung zu SQL Server herstellt, muss das Konto über die entsprechenden Windows-/NT-Berechtigungen verfügen und sich bei SQL Server mit den erforderlichen Datenbankberechtigungen anmelden können. Für die Aufträge, die ein DTS-Paket ausführen, muss das Proxykonto für den SQL-Agenten über Lese- und Schreibberechtigungen für das temporäre Verzeichnis des Kontos verfügen, unter dem der SQL Server-Agent ausgeführt wird. Beispiel:
c:\Dokumente und Einstellungen\<Konto>\Lokale Einstellungen\Temp
Befindet sich der Auftrag im Besitz eines Kontos (entweder eines SQL Server-Anmeldekontos oder eines durch Windows NT authentifizierten Anmeldekontos), das Mitglied der Rolle Sysadmin ist, wird der SQL-Agent-Auftrag im Kontext des Kontos ausgeführt, das zum Starten des Dienstes "SQL-Agent" verwendet wird.

Wenn der Besitzer des Auftrags ein Windows NT-Domänenkonto ist und das Paket auf dem SQL-Server oder im SQL Server-Repository gespeichert wurde (nicht als Datei), müssen Sie den SQL Server-Dienst mit einem Konto aus derselben Domäne oder einem Konto aus einer vertrauenswürdigen Domäne starten. Ist der SQL-Agent-Auftrag beispielsweise im Besitz eines Kontos aus der Domäne "USA", muss das zum Starten des SQL Server-Dienstes verwendete Konto entweder aus der USA-Domäne oder aus einer Domäne stammen, der die USA-Domäne vertraut. Wenn der SQL-Server mit einem lokalen Konto gestartet wird, schlägt die Ausführung des Pakets fehl.

Welche Faktoren bestimmen, wer der Besitzer ist?

Frage: Wenn man mit der rechten Maustaste auf das DTS-Paket klickt und das Paket dann einplant, wie wird dann der Besitzer bestimmt?

Antwort: Wer Besitzer des SQL-Agent-Auftrags ist, hängt davon ab, wie der SQL-Server im Enterprise Manager registriert ist. Wenn der SQL-Server unter Verwendung der Windows NT-Authentifizierung registriert wurde, ist das zum Starten des Dienstes "SQL-Agent" verwendete Konto der Besitzer des geplanten Auftrags. Wenn der SQL-Server unter Verwendung der SQL Server-Authentifizierung im SEM registriert wurde (zum Beispiel mit der SA-Anmeldung), ist diese SQL Server-Anmeldung der Besitzer des geplanten Auftrags.

Gehen Sie folgendermaßen vor, um den Besitzer des Pakets zu ändern:
  1. Doppelklicken Sie im Enterprise Manager auf den Auftrag.
  2. Klicken Sie auf die Registerkarte Allgemein und anschließend auf das Dropdown-Kombinationsfeld Besitzer.
Sie können auch die gespeicherte Systemprozedur msdb.dbo.sp_update_job verwenden, um einen anderen Besitzer für ein Paket festzulegen.

Wie wird die Ausführung des DTS-Pakets gestartet?

Wenn Sie ein Paket manuell mithilfe des Befehszeilenprogramms DTSRun.exe ausführen, ist der Sicherheitskontext der des Windows-Kontos, das Sie verwendet haben, um sich bei dem Computer anzumelden. Wenn Sie das Paket mit DTSrun.exe unter Verwendung der erweiterten gespeicherten Prozedur xp_cmdshell ausführen, erfolgt die Ausführung des Pakets im Sicherheitskontext des Kontos, mit dem der SQL Server-Dienst gestartet wurde, sofern der Benutzer, der die Prozedur xp_cmdshell ausgeführt hat, Mitglied der Rolle Sysadmin ist. Wenn der Benutzer, der die Prozedur xp_cmdshell ausgeführt hat, nicht Mitglied der Rolle Sysadmin ist, wird DTSRun.exe im Kontext des Kontos SQLAgentCmdExec ausgeführt.

Wenn der SQL Server-Dienst unter Verwendung des Kontos Lokales System gestartet wurde, verfügt das DTS-Paket außerhalb des Computers, auf dem SQL Server ausgeführt wird, über keinerlei Berechtigungen.

Wenn der SQL Server-Dienst unter einem Windows NT-Konto gestartet wird, gelten für das Paket dieselben Berechtigungen wie für dieses Windows NT-Konto. Handelt es sich bei diesem Windows NT-Konto um ein lokales Computerkonto (also nicht um ein Domänenkonto), verfügt das Paket außerhalb des betreffenden Computers über keinerlei Berechtigungen. Wenn das Windows NT-Konto jedoch ein Domänenkonto ist, kann das Paket auf Ressourcen auf diversen Computern innerhalb dieser Domäne zugreifen.

Wie werden Verbindungen mit Windows NT-Authentifizierung hergestellt?

In manchen Fällen enthält ein DTS-Paket ein Objekt, das unter Verwendung der Windows NT-Authentifizierung eine Verbindung zu einer Datenquelle herstellt. Der auf diese Verbindung angewendete Sicherheitskontext entspricht dem, der für das ausgeführte Paket selbst gilt. Wird das Paket aus einer Eingabeaufforderung unter Verwendung von DTSRun.exe ausgeführt, werden die Anmeldeinformationen des aktuell angemeldeten Windows NT-Kontos verwendet. Bei einer Ausführung des Pakets als Auftrag des SQL Server-Agenten wird die Verbindung mit integrierter Sicherheit unter Verwendung des Kontos hergestellt, mit dem der SQL-Agent gestartet wurde (sofern der Besitzer des Pakets Mitglied der Rolle Sysadmin ist).

Häufig auftretende Probleme

Im Folgenden werden einige der Probleme beschrieben, die bei der Ausführung von DTS-Paketen als geplanter Auftrag im SQL-Agenten häufig auftreten:

Zugeordnete Laufwerke

Wenn ein Paket vom physischen Speicherort einer Datei abhängig ist, der durch ein zugeordnetes Laufwerk bestimmt wird, kann die Ausführung des Pakets als geplanter SQL-Agent-Auftrag unabhängig davon, wer der Besitzer des Pakets ist, fehlschlagen. Der SQL-Agent ist ein Windows NT-Dienst, und Windows NT-Dienste erkennen zugeordnete Laufwerkbuchstaben nicht. Die Zuordnung ist Bestandteil des Benutzerprofils, das geladen wird, wenn ein Benutzer sich bei einer Windows NT-Sitzung anmeldet. Dienste verwenden keine Benutzerprofile. Verwenden Sie statt eines zugeordneten Laufwerkbuchstabens einen UNC-Pfad.

Relativer Pfad

Ein relativer Pfad (oder Laufwerkbuchstabe) ist spezifisch für den aktuellen Speicherort des Pakets (wie C:\). Wird ein Paket auf einer Arbeitsstation erstellt und anschließend eingeplant, ändert sich der Speicherort, von dem aus das Paket ausgeführt wird. Die Laufwerkbuchstabenpfade verweisen nun auf einen anderen physischen Speicherort (auf dem Server). Sofern die Dateien, auf die verwiesen wird, nicht ebenfalls auf den Server verschoben werden, schlägt die Ausführung des Pakets fehl.

COM-Komponenten in ActiveX-Skripts

Wenn COM-Komponenten (zum Beispiel Aufrufe an Objekte wie Microsoft ActiveX Data Objects [ADO], Remote Data Objects [RDO] oder Decision Support Object [DSO]) in einem ActiveX-Skript aufgerufen werden, müssen die aufgerufenen Komponenten auf dem Computer vorhanden sein, von dem aus das DTS-Paket ausgeführt wird. Wenn Sie das Paket aus dem DTS-Designer im SEM oder mithilfe von DTSRun.exe ausführen, müssen diese Komponenten auf dem Computer gespeichert sein, an dem Sie gerade arbeiten. Wenn das Paket für eine Ausführung durch den SQL-Agenten eingeplant wurde, müssen die aufgerufenen Komponenten auf dem Computer geladen sein, der als Host für den SQL-Server fungiert.

Paketsicherheit

Für DTS-Pakete können Besitzerkennwörter und Benutzerkennwörter festgelegt sein. Diese Kennwörter haben Auswirkungen darauf, wer die Pakete bearbeiten und ausführen darf. Sie haben jedoch keine Auswirkungen darauf, in welchem Sicherheitskontext das Paket ausgeführt wird.

SQLAgentCmdExec-Berechtigungen

Wenn der Auftrag im Kontext des Kontos SQLAgentCmdExec ausgeführt wird und dieses Konto nicht über die Berechtigung verfügt, sich bei dem SQL-Server anzumelden, kann der Auftrag fehlschlagen, wobei die folgende Fehlermeldung angezeigt wird:
DTSRun: Lädt... DTSRun: Führt aus... DTSRun OnStart: DTSStep_DTSExecuteSQLTask_1 DTSRun OnError: DTSStep_DTSExecuteSQLTask_1, Fehler = -2147217843 (80040E4D) Fehlerzeichenfolge: Fehler bei der Anmeldung für den Benutzer 'NT_name\SQLAgentCmdExec'. Fehlerquelle: Microsoft OLE DB Provider for SQL Server Help file: Hilfekontext: 0 Fehlerdetail-Datensätze: Fehler: -2147217843 (80040E4D); Providerfehler: 18456 (4818) Fehlerzeichenfolge: Fehler bei der Anmeldung für den Benutzer 'NT_name\SQLAgentCmdExec'. Fehlerquelle: Microsoft OLE DB Provider for SQL Server Help file: Hilfekontext: 0 DTSRun OnFinish: DTSStep_DTSExecuteSQLTask_1 DTSRun: Paketausführung beendet. Prozessexitcode 1. Fehler bei Schritt.
Wenn diese Fehlermeldung angezeigt wird, müssen Sie dem Konto SQLAgentCmdExec die erforderlichen Anmelde- und Datenbankberechtigungen für den SQL-Server zuweisen.

Eigenschaften

Artikel-ID: 269074 - Geändert am: Dienstag, 15. Februar 2011 - Version: 3.4
Keywords: 
kbsqlssas kbproductlink kbinfo KB269074
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com