SSIS-paket körs inte när de anropas från en SQL Server Agent-jobbsteg

Gäller för: SQL Server 2008 DeveloperSQL Server 2008 EnterpriseSQL Server 2008 Standard

Symptom


När du ringer ett paket för Microsoft SQL Server 2005 Integration Services (SSI-filer) från en SQL Server Agent-jobbsteg körs SSIS-paket inte. Men om du inte ändrar SSIS-paket, kommer det köras utanför SQL Server Agent.

Lösning


Lös problemet med någon av följande metoder. Metoden lämpar sig bäst beror på miljön och orsaken till att paketet misslyckades. Orsaker till att paketet har misslyckats är följande:
  • Användarkontot som används för att köra paketet under SQL Server Agent skiljer sig från den ursprungliga författaren av paketet.
  • Användarkontot har inte behörighet att skapa anslutningar eller för åtkomst till resurser utanför SSIS-paket.
Paketet fungerar inte i följande fall:
  • Den aktuella användaren kan inte dekryptera hemligheter från paketet. I det här scenariot kan uppstå om det aktuella kontot eller kontot utförande skiljer sig från den ursprungliga författaren paketet och det paketet ProtectionLevel egenskapsinställningen kan inte den aktuella användaren dekryptera hemligheter i paketet.
  • En SQL Server-anslutning som använder integrerad säkerhet misslyckas eftersom den aktuella användaren inte har behörigheterna som krävs.
  • Åtkomst till filen misslyckas eftersom den aktuella användaren inte har behörighet att skriva till filresursen som Anslutningshanteraren har tillgång till. I det här scenariot kan till exempel uppstå med text logg leverantörer som inte använder ett inloggningsnamn och ett lösenord. I det här scenariot kan också uppstå med alla aktiviteter som är beroende av Anslutningshanteraren filen, till exempel en uppgift för SSIS file system.
  • En registerbaserad konfiguration för SSIS-paket använder HKEY_CURRENT_USER registernycklar. HKEY_CURRENT_USER-registernycklar är användarspecifika.
  • En uppgift eller en Anslutningshanteraren kräver att det aktuella användarkontot har rätt behörigheter.
Metod 1: Använd en proxy-kontot SQL Server Agent
Skapa en proxy-kontot SQL Server Agent. Proxy-kontot måste använda en referens som kan köra jobbet som det konto som skapat paketet eller ett konto som har behörighet för SQL Server Agent.

Denna metod fungerar om du vill dekryptera hemligheter och uppfyller viktiga krav av användare. Den här metoden kanske har dock begränsad framgång eftersom SSIS-paket användarnycklar avser den aktuella användaren och den aktuella datorn. Därför, om du flyttar paketet till en annan dator med den här metoden fortfarande misslyckas, även om jobbsteg använder rätt proxy-kontot.


Metod 2: Ange egenskapen ProtectionLevel för SSIS-paket till ServerStorage
Ändra egenskapen SSIS-paket ProtectionLevel till ServerStorage. Den här inställningen paketet lagras i en SQL Server-databas och används för behörighetskontroll genom databasroller för SQL Server.

Metod 3: Ange egenskapen ProtectionLevel för SSIS-paket till EncryptSensitiveWithPassword
Ändra egenskapen SSIS-paket ProtectionLevel till EncryptSensitiveWithPassword. Den här inställningen använder ett lösenord för kryptering. Du kan sedan ändra kommandoraden för SQL Server Agent-jobbet steg om du vill inkludera det här lösenordet.


Metod 4: Använda SSIS-paket konfigurationsfiler
Använda konfigurationsfiler för SSIS-paket för att lagra känslig information och sedan lagra dessa konfigurationsfiler i en skyddad mapp. Du kan ändra egenskapen ProtectionLevel för DontSaveSensitive så att paketet inte är krypterade och inte försöker spara hemligheter i paketet. När du kör SSIS-paket in nödvändig information från konfigurationsfilen. Kontrollera att filerna skyddas på lämpligt sätt om de innehåller känslig information.


Metod 5: Skapa en mall för paket
Skapa en mall för paket som använder en skyddsnivå som skiljer sig från standardinställningen för en långsiktig lösning. Det här problemet uppstår inte i framtida paket.

Status


Detta är avsiktligt.

Avancerad information


Åtgärder för att återskapa problemet

  1. Logga in som en användare som inte är en del av gruppen SQLServer2005SQLAgentUser. Du kan till exempel skapa en lokal användare.
  2. Skapa en SSIS-paket och lägga till en aktivitet med ExecuteSQL. Använda en OLE DB-Anslutningshanteraren till lokala msdb-fil med följande sträng: Windows-autentisering - SQLSourceType: ”indata” - SQLStatement: ”sp_who”
  3. Kör paketet så att det körs utan problem.
  4. Observera att egenskapen ProtectionLevel anges till EncryptSensitiveWithPassword.
  5. Skapa ett SQL Server Agent-jobb och ett jobbsteg. Klicka på SQL Server Agent-tjänsten om du vill köra jobbsteg i listan Kör som .
Texten i SQL Server Agent-jobbhistorik visas information av följande slag:

Dekryptera paketet hemligheter

Standardinställningen för SSIS-paket egenskapen ProtectionLevel är EncryptSensitiveWithUserKey. När paketet har sparats krypterar SSIS bara de delar av paketet som innehåller egenskaper som är markerade ”känsliga”, som lösenord, användarnamn och anslutningssträngar. Därför när paketet laddas måste den aktuella användaren uppfylla de kryptering för känsliga egenskaper kunna dekrypteras. Den aktuella användaren har inte uppfyller krypteringskraven att hämta paketet. När du kör paketet till en SQL Server Agent-jobbsteg är standardkonto kontot SQL Server Agent-tjänsten. Detta standardkonto är förmodligen en annan användare än paketets upphovsman. Därför steg för SQL Server Agent-jobb kan läsa in och starta jobbet steget ska köras, men paketet misslyckas eftersom det går inte att slutföra en anslutning. Till exempel slutföra paketet inte en OLE DB-anslutning eller en FTP-anslutning. Paketet misslyckas eftersom det går inte att dekryptera autentiseringsuppgifterna som krävs för att ansluta.


Viktigt  Fundera över utvecklingsprocessen och miljö för att fastställa vilka konton som behövs och används på varje dator. EncryptSensitiveWithUserKey-inställningen för egenskapen ProtectionLevel är en kraftfull inställning. Den här inställningen diskonteras inte eftersom den medför komplikationer distribution först. Du kan kryptera paketen när du är inloggad på rätt konto. Du kan också använda Dtutil.exe SSIS-kommandoradsverktyget för att ändra skyddsnivåer med en CMD-fil och SQL Server Agent kommandot undersystemet. Till exempel så här. Eftersom du kan använda verktyget Dtutil.exe i kommandofiler och slingor följa du stegen för flera paket samtidigt.
  1. Ändra det paket som du vill kryptera med lösenord.
  2. Använd verktyget Dtutil.exe via ett operativsystem (cmd Exec) SQL Server Agent-jobbsteg ändra egenskapen ProtectionLevel till EncryptSensitiveWithUserKey. Den här processen att dekryptera paketet genom att använda lösenord och krypterar paketet på nytt. Användarnyckel som används för att kryptera paketet är SQL Server Agent-jobbsteg i listan Kör som .

    Obs! Eftersom nyckeln innehåller användarnamnet och datornamnet, kan effekten av att flytta paket till en annan dator vara begränsad.

Kontrollera att du har information om felet om felet SSIS-paket

I stället för en begränsad information i SQL Server Agent-jobbet tidigare, använder du SSIS loggning om du vill kontrollera att du har felinformation om SSIS-paket-fel. Du kan också köra paketet med hjälp av kommandot exec undersystem i stället för kommandot SSIS-undersystemet.

Om SSIS-loggning

SSIS loggar och loggfiler providers kan du samla in information om körning av paketet och misslyckanden. Standard är att paketet inte logga information. Du måste konfigurera paketet för att logga information. När du konfigurerar paket att logga information visas detaljerad information av följande slag. I så fall vet du att det är ett problem med behörigheter:

VidFel, domännamn, domännamn\användarnamn, FTP-Task,{C73DE41C-D0A6-450A-BB94-DF6D913797A1},{2F0AF5AF-2FFD-4928-88EE-1B58EB431D74},4/28/2006 1:51:59 PM, 2006-4/28 1:51:59 PM,-1073573489, 0 x, det går inte att ansluta till FTP-servern med hjälp av ”FTP Connection Manager”.

VidFel, domännamn, domännamn\användarnamn köra SQL Task,{C6C7286D-57D4-4490-B12D-AC9867AE5762},{F5761A49-F2F9-4575-9E2B-B3D381D6E1F3},4/28/2006 4:07:00: 00 4/28/2006 4:07:00 PM,-1073573396, 0 x, det gick inte att erhålla anslutning ”user01.msdb”. Anslutningen är kanske inte korrekt konfigurerad eller du kanske inte har rätt behörigheter för den här anslutningen.

Om kommandot exec-undersystemet och utgående information

Lägg till detaljerad konsol loggar växlar på kommandoraden SSIS att anropa Dtexec.exe SSIS kommandoradsverktyget körbar fil med hjälp av metoden kommandot exec undersystem. Dessutom kan du använda funktionen Avancerat jobb i utdatafilen. Du kan också använda alternativet Inkludera steg utdata i historiken för att omdirigera logga information till en fil eller jobbhistorik för SQL Server Agent.

Följande är ett exempel på en kommandorad:
 
dtexec.exe /FILE "C:\_work\SSISPackages\ProtectionLevelTest\ProtectionLevelTest\AgentTesting.dtsx" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF  /REPORTING V  /CONSOLELOG NCOSGXMT 


Loggningen/Console returnerar information av följande slag:
 
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:34End Log 

Referenser


Mer information om ett liknande problem klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

904800 felmeddelandet ”fel vid inläsning av” visas när du försöker köra ett SQL Server 2005 Integration Services-paket i SQL Server 2005

Mer information om hur du använder verktyget Dtutil.exe i batch-åtgärder klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

906562 hur du använder verktyget dtutil (Dtutil.exe) för att skyddsnivån av ett parti av SQL Server Integration Services (SSIS) paket i SQL Server 2005

Mer information om hur du skapar paketet mallar klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

908018 hur du skapar en mall för paket i SQL Server Business Intelligence Development Studio



Mer information om säkerhet för SSIS-paket och egenskapen ProtectionLevel finns i avsnittet ”säkerhet överväganden för Integration Services” i SQL Server 2005 Books Online.

Användarna är tyvärr inte medvetna om att standardinställningarna agent jobbet steg placera dem i detta tillstånd. Mer information om SQL Server Agent-proxyservrar och SSI-filer finns i följande avsnitt i SQL Server 2005 Books Online:
  • Schemaläggning av paketet körning i SQL Server Agent
  • Skapar SQL Server Agent-proxyservrar