Udostępnij przez


Pakiet usług SSIS nie jest uruchamiany po wywołaniu z kroku zadania programu SQL Server Agent

Ten artykuł ułatwia rozwiązanie problemu występującego podczas wywoływania pakietu usług SSIS z kroku zadania agenta programu 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 programu SQL Server pakiet SSIS nie jest uruchamiany. Jeśli jednak nie zmodyfikujesz pakietu usług SSIS, zostanie on uruchomiony pomyślnie 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 programie 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 poza pakietem usług SSIS.

Pakiet może nie działać 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żącego użytkownika na odszyfrowywanie wpisów tajnych w pakiecie.
  • Połączenie programu SQL Server korzystające 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órego uzyskuje dostęp menedżer połączeń. Na przykład ten scenariusz może wystąpić z dostawcami 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 HKEY_CURRENT_USER kluczy rejestru. Klucze HKEY_CURRENT_USER rejestru są specyficzne dla użytkownika.
  • Zadanie lub menedżer połączeń wymaga, aby bieżące konto użytkownika ma poprawne uprawnienia.

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

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

    Ta metoda działa w celu odszyfrowywania wpisów tajnych i spełnia kluczowe wymagania użytkownika. Jednak ta metoda może mieć ograniczony sukces, ponieważ klucze użytkownika pakietu SSIS obejmują bieżącego użytkownika i bieżącego komputera. W związku z tym, jeśli pakiet zostanie przeniesiony 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 programu SQL Server i umożliwia kontrolę dostępu za pośrednictwem ról bazy danych programu SQL Server.

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

  • Metoda 4. Użyj plików konfiguracji pakietu SSIS. Pliki konfiguracji pakietu SSIS służą do przechowywania poufnych informacji, a następnie przechowywania tych plików konfiguracji w zabezpieczonym folderze. Następnie można zmienić właściwość na ProtectionLevelDontSaveSensitive tak, aby pakiet nie był zaszyfrowany i nie próbuje zapisać wpisów tajnych w pakiecie. Po uruchomieniu pakietu usług SSIS wymagane informacje są ładowane z pliku konfiguracji. Upewnij się, że pliki konfiguracji są odpowiednio chronione, jeśli zawierają poufne informacje.

  • 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 jest częścią grupy SQLServerSQLAgentUser. Możesz na przykład utworzyć użytkownika lokalnego.
  2. Utwórz pakiet usług SSIS, a następnie dodaj zadanie ExecuteSQL. Użyj menedżera połączeń OLE DB do lokalnego pliku msdb, używając następujących parametrów: 'Windows Authentication' -SQLSourceType: "Direct Input" -SQLStatement: "sp_who".
  3. Uruchom pakiet, aby upewnić się, że został uruchomiony pomyślnie.
  4. Właściwość ProtectionLevel ma ustawioną wartość EncryptSensitiveWithPassword.
  5. Utwórz zadanie agenta programu SQL Server i krok zadania. Na liście Uruchom jako kliknij pozycję Usługa agenta programu SQL Server, aby uruchomić krok zadania. Tekst w historii zadań agenta programu SQL Server zawiera informacje podobne do następujących:

Odszyfrowywanie wpisów tajnych pakietu

Ustawieniem domyślnym 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 sensitivejako , 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 szyfrowania właściwości sensitive , które mają zostać odszyfrowane. Jednak bieżący użytkownik nie musi spełniać wymagań dotyczących szyfrowania w celu załadowania pakietu. Po uruchomieniu pakietu za pomocą kroku zadania agenta programu SQL Server domyślne konto to konto usługi agenta programu SQL Server. To domyślne konto jest najprawdopodobniej innym użytkownikiem niż autor pakietu. W związku z tym krok zadania agenta programu SQL Server może załadować i uruchomić krok 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 lub połączenia FTP. Pakiet kończy się niepowodzeniem, ponieważ nie może odszyfrować poświadczeń, które musi nawiązać połączenie.

Ważne

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 to zaawansowane ustawienie. To ustawienie nie powinno być dyskontowane, ponieważ powoduje komplikacje wdrażania na początku. Pakiety można szyfrować po zalogowaniu się do odpowiedniego konta. Można również użyć narzędzia wiersza polecenia Dtutil.exe SSIS, aby zmienić poziomy ochrony przy użyciu pliku .cmd i podsystemu poleceń agenta programu SQL Server. Na przykład wykonaj następujące kroki. Ponieważ można użyć narzędzia Dtutil.exe w plikach i pętlach wsadowych, możesz wykonać te kroki dla kilku pakietów jednocześnie.

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

  2. Użyj narzędzia Dtutil.exe za pomocą kroku zadania agenta programu SQL Server (cmd Exec) systemu operacyjnego, aby zmienić ProtectionLevel właściwość na EncryptSensitiveWithUserKey. Ten proces obejmuje odszyfrowywanie pakietu przy użyciu hasła, a następnie ponowne szyfrowanie pakietu. Klucz użytkownika używany do szyfrowania pakietu to ustawienie kroku zadania agenta programu SQL Server 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 programu SQL Server, możesz użyć rejestrowania usług SSIS, aby upewnić się, że masz informacje o błędzie dotyczące niepowodzenia pakietu usług SSIS. Pakiet można również uruchomić za pomocą polecenia podsystemu exec zamiast polecenia podsystemu SSIS.

Informacje o rejestrowaniu usług SSIS

Dostawcy rejestrowania i rejestrowania usług SSIS umożliwiają przechwytywanie szczegółów dotyczących wykonywania i błędów pakietu. Domyślnie pakiet nie rejestruje informacji. Należy skonfigurować pakiet w celu rejestrowania informacji. Po skonfigurowaniu pakietu w celu rejestrowania informacji zostaną wyświetlone szczegółowe informacje podobne do poniższych. 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

Korzystając z podejścia polecenia podsystemu exec, dodajesz pełne rejestrowanie konsoli przełączniki do wiersza polecenia SSIS w celu wywołania Dtexec.exe pliku wykonywalnego wiersza polecenia SSIS. Ponadto należy użyć funkcji Zadanie zaawansowane pliku wyjściowego. Możesz również użyć opcji Uwzględnij dane wyjściowe kroku w historii , aby przekierować informacje rejestrowania do pliku lub do historii zadań agenta programu SQL Server.

Oto 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 komunikatów:

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