Udostępnij za pośrednictwem


Pakiet SSIS nie jest uruchamiany po wywołaniu z kroku zadania agenta SQL Server

Ten artykuł ułatwia rozwiązanie problemu występującego podczas wywoływania pakietu SSIS z kroku zadania agenta SQL Server.

Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 918760

Symptomy

Po wywołaniu pakietu usług Microsoft SQL Server Integration Services (SSIS) z kroku zadania agenta SQL Server pakiet SSIS nie jest uruchamiany. Jeśli jednak nie zmodyfikujesz pakietu SSIS, zostanie on pomyślnie uruchomiony poza programem SQL Server Agent.

Rozwiązanie

Aby rozwiązać ten problem, skorzystaj z jednej z następujących metod. Najbardziej odpowiednia metoda zależy od środowiska i przyczyny niepowodzenia pakietu. Przyczyny niepowodzenia pakietu są następujące:

  • Konto użytkownika używane do uruchamiania pakietu w obszarze SQL Server Agent różni się od oryginalnego autora pakietu.
  • Konto użytkownika nie ma wymaganych uprawnień do nawiązywania połączeń ani uzyskiwania dostępu do zasobów spoza pakietu SSIS.

Pakiet może nie być uruchamiany w następujących scenariuszach:

  • Bieżący użytkownik nie może odszyfrować wpisów tajnych z pakietu. Ten scenariusz może wystąpić, jeśli bieżące konto lub konto wykonywania różnią się od oryginalnego autora pakietu, a ustawienie właściwości ProtectionLevel pakietu nie zezwala bieżącemu użytkownikowi na odszyfrowywanie wpisów tajnych w pakiecie.
  • Połączenie SQL Server, które korzysta ze zintegrowanych zabezpieczeń, kończy się niepowodzeniem, ponieważ bieżący użytkownik nie ma wymaganych uprawnień.
  • Dostęp do plików kończy się niepowodzeniem, ponieważ bieżący użytkownik nie ma wymaganych uprawnień do zapisu w udziale plików, do których uzyskuje dostęp menedżer połączeń. Na przykład ten scenariusz może wystąpić w przypadku dostawców dzienników tekstowych, którzy nie używają nazwy logowania i hasła. Ten scenariusz może również wystąpić w przypadku dowolnego zadania, które zależy od menedżera połączeń plików, takiego jak zadanie systemu plików SSIS.
  • Konfiguracja pakietu SSIS oparta na rejestrze używa kluczy HKEY_CURRENT_USER rejestru. Klucze HKEY_CURRENT_USER rejestru są specyficzne dla użytkownika.
  • Zadanie lub menedżer połączeń wymaga, aby bieżące konto użytkownika było poprawne.

Aby rozwiązać ten problem, użyj następujących metod:

  • Metoda 1. Używanie konta serwera proxy agenta SQL Server. Utwórz konto serwera proxy agenta SQL Server. To konto serwera proxy musi używać poświadczeń, które umożliwiają SQL Server agentowi uruchamianie zadania jako konta, które utworzyło pakiet, lub jako konta z wymaganymi uprawnieniami.

    Ta metoda działa w celu odszyfrowania wpisów tajnych i spełnienia wymagań dotyczących kluczy przez użytkownika. Jednak ta metoda może mieć ograniczony sukces, ponieważ klucze użytkownika pakietu SSIS obejmują bieżącego użytkownika i bieżący komputer. W związku z tym, jeśli przeniesiesz pakiet na inny komputer, ta metoda może nadal zakończyć się niepowodzeniem, nawet jeśli krok zadania używa poprawnego konta serwera proxy.

  • Metoda 2. Ustaw właściwość SSIS Package ProtectionLevel na ServerStorage. Zmień właściwość SSIS Package ProtectionLevel na ServerStorage. To ustawienie przechowuje pakiet w bazie danych SQL Server i umożliwia kontrolę dostępu za pośrednictwem SQL Server ról bazy danych.

  • Metoda 3. Ustaw właściwość SSIS Package ProtectionLevel na EncryptSensitiveWithPassword. Zmień właściwość pakietu ProtectionLevel SSIS na EncryptSensitiveWithPassword. To ustawienie używa hasła do szyfrowania. Następnie możesz zmodyfikować wiersz polecenia kroku zadania agenta SQL Server, aby uwzględnić to hasło.

  • Metoda 4. Używanie plików konfiguracji pakietu SSIS. Pliki konfiguracji pakietu SSIS umożliwiają przechowywanie poufnych informacji, a następnie przechowywanie tych plików konfiguracji w zabezpieczonym folderze. Następnie możesz zmienić ProtectionLevel właściwość na tak, aby DontSaveSensitive pakiet nie był szyfrowany i nie próbował zapisywać wpisów tajnych w pakiecie. Po uruchomieniu pakietu SSIS wymagane informacje są ładowane z pliku konfiguracji. Upewnij się, że pliki konfiguracji są odpowiednio chronione, jeśli zawierają informacje poufne.

  • Metoda 5. Tworzenie szablonu pakietu. W przypadku długoterminowego rozwiązania utwórz szablon pakietu, który używa poziomu ochrony, który różni się od ustawienia domyślnego. Ten problem nie wystąpi w przyszłych pakietach.

Kroki prowadzące do odtworzenia problemu

  1. Zaloguj się jako użytkownik, który nie należy do grupy SQLServerSQLAgentUser. Możesz na przykład utworzyć użytkownika lokalnego.
  2. Utwórz pakiet SSIS, a następnie dodaj zadanie ExecuteSQL. Użyj menedżera połączeń OLE DB z lokalnym plikiem msdb, używając następującego ciągu: 'Windows Authentication' -SQLSourceType: "Direct Input" -SQLStatement: "sp_who".
  3. Uruchom pakiet, aby upewnić się, że działa on pomyślnie.
  4. Właściwość jest ustawiona ProtectionLevel na EncryptSensitiveWithPassword.
  5. Utwórz zadanie agenta SQL Server i krok zadania. Na liście Uruchom jako kliknij pozycję SQL Server Agent Service, aby uruchomić krok zadania. Tekst w historii zadań agenta SQL Server wyświetla informacje podobne do następujących:

Odszyfrowywanie wpisów tajnych pakietu

Domyślnym ustawieniem właściwości pakietu ProtectionLevel SSIS jest EncryptSensitiveWithUserKey. Po zapisaniu pakietu usługa SSIS szyfruje tylko części pakietu zawierające właściwości oznaczone sensitive, takie jak hasła, nazwy użytkowników i parametry połączenia. W związku z tym po ponownym załadowaniu pakietu bieżący użytkownik musi spełnić wymagania dotyczące sensitive szyfrowania, aby właściwości zostały odszyfrowane. Jednak bieżący użytkownik nie musi spełniać wymagań dotyczących szyfrowania, aby załadować pakiet. Po uruchomieniu pakietu za pośrednictwem kroku zadania agenta SQL Server domyślnym kontem jest konto usługi SQL Server Agent. To konto domyślne jest najprawdopodobniej innym użytkownikiem niż autor pakietu. W związku z tym krok zadania agenta SQL Server może załadować i rozpocząć uruchamianie kroku zadania, ale pakiet kończy się niepowodzeniem, ponieważ nie może ukończyć połączenia. Na przykład pakiet nie może ukończyć połączenia OLE DB ani połączenia FTP. Pakiet kończy się niepowodzeniem, ponieważ nie może odszyfrować poświadczeń, które musi mieć do nawiązania połączenia.

Ważna

Rozważ proces programowania i środowisko, aby określić, które konta są potrzebne i używane na każdym komputerze. Ustawienie ProtectionLevel EncryptSensitiveWithUserKey właściwości jest zaawansowanym ustawieniem. To ustawienie nie powinno być dyskontowane, ponieważ powoduje komplikacje związane z wdrażaniem na początku. Pakiety można zaszyfrować po zalogowaniu się do odpowiedniego konta. Możesz również użyć narzędzia wiersza polecenia Dtutil.exe SSIS, aby zmienić poziomy ochrony przy użyciu pliku .cmd i podsystemu polecenia agenta SQL Server. Na przykład wykonaj następujące kroki. Ponieważ możesz użyć narzędzia Dtutil.exe w plikach wsadowych i pętlach, możesz wykonać te kroki w przypadku kilku pakietów w tym samym czasie.

  1. Zmodyfikuj pakiet, który chcesz zaszyfrować przy użyciu hasła.

  2. Użyj narzędzia Dtutil.exe za pośrednictwem systemu operacyjnego (cmd Exec) SQL Server kroku zadania agenta, aby zmienić właściwość na ProtectionLevelEncryptSensitiveWithUserKey. Ten proces obejmuje odszyfrowanie pakietu przy użyciu hasła, a następnie ponowne zaszyfrowanie pakietu. Klucz użytkownika używany do szyfrowania pakietu to ustawienie kroku zadania SQL Server Agent na liście Uruchom jako.

    Uwaga

    Ponieważ klucz zawiera nazwę użytkownika i nazwę komputera, efekt przenoszenia pakietów na inny komputer może być ograniczony.

Upewnij się, że masz szczegółowe informacje o błędzie dotyczące niepowodzenia pakietu SSIS

Zamiast polegać na ograniczonych szczegółach w historii zadań agenta SQL Server, możesz użyć rejestrowania usługi SSIS, aby upewnić się, że masz informacje o błędzie dotyczące niepowodzenia pakietu SSIS. Pakiet można również uruchomić przy użyciu polecenia exec podsystemu zamiast polecenia podsystemu SSIS.

Informacje o rejestrowaniu usługi SSIS

Dostawcy rejestrowania i rejestrowania usługi SSIS umożliwiają przechwytywanie szczegółów dotyczących wykonywania pakietu i niepowodzeń. Domyślnie pakiet nie rejestruje informacji. Należy skonfigurować pakiet do rejestrowania informacji. Podczas konfigurowania pakietu do rejestrowania informacji są wyświetlane szczegółowe informacje podobne do następujących. W takim przypadku będziesz wiedzieć, że jest to problem z uprawnieniami:

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.

Informacje o poleceniu i danych wyjściowych podsystemu exec

Za pomocą metody polecenia exec podsystemu można dodać pełne przełączniki rejestrowania konsoli do wiersza polecenia SSIS, aby wywołać plik wykonywalny wiersza polecenia Dtexec.exe SSIS. Ponadto należy użyć funkcji zadania zaawansowanego pliku wyjściowego. Możesz również użyć opcji Uwzględnij dane wyjściowe kroku w historii, aby przekierowywać informacje rejestrowania do pliku lub do historii zadań agenta SQL Server.

Poniżej przedstawiono przykład wiersza polecenia:

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

Rejestrowanie konsoli zwraca szczegóły podobne do następujących:

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

Informacje

Niestety, użytkownicy nie są świadomi, że domyślne ustawienia kroku zadania agenta umieszczają je w tym stanie. Aby uzyskać więcej informacji na temat serwerów proxy SQL Server Agent i SSIS, zobacz następujące tematy w SQL Server 2005 Books Online:

  • Planowanie wykonywania pakietu w agencie SQL Server
  • Tworzenie serwerów proxy agenta SQL Server