Symptomer

Når du kalder en Microsoft SQL Server 2005 Integration Services-pakke (SSIS) fra et SQL Server Agent-jobtrin, køres SSIS-pakken ikke. Hvis du imidlertid ikke ændrer SSIS-pakken, kan den køres uden for SQL Server Agent.

Løsning

Du kan løse problemet ved at benytte en af følgende metoder. Den mest relevante metode afhænger af miljøet og årsagen til, at pakken mislykkedes. Der kan være følgende årsager til, at pakken mislykkedes:

  • Den brugerkonto, der bruges til at køre pakken under SQL Server Agent, er forskellig i forhold til pakkens oprindelige forfatter.

  • Brugerkontoen har ikke de nødvendige tilladelser til at oprette forbindelser eller til at få adgang til ressourcer uden for SSIS-pakken.

Pakken køres muligvis ikke i følgende scenarier:

  • Den aktuelle bruger kan ikke afkode pakkens hemmeligheder. Dette scenarie kan opstå, hvis den aktuelle konto eller afviklingskontoen er forskellig fra pakkens oprindelige forfatter, og pakkeegenskaben ProtectionLevel ikke giver den aktuelle bruger mulighed for at dekryptere pakkens hemmeligheder.

  • En SQL Server-forbindelse, der bruger integreret sikkerhed, giver fejl, fordi den aktuelle bruger har ikke de nødvendige tilladelser.

  • Filadgang mislykkedes, fordi den aktuelle bruger ikke har de nødvendige tilladelser til at skrive til det filshare, som forbindelsesstyringen har adgang til. Dette scenarie kan f.eks. opstå med tekstlog-providere, der ikke bruger et login og en adgangskode. Dette scenarie kan også forekomme i forbindelse med en hvilken som helst opgave, der afhænger af filens forbindelsesstyring, f.eks. en SSIS-filsystemopgave.

  • En konfiguration af SSIS-pakken, der er baseret på registreringsdatabasen, bruger registreringsdatabasenøglerne HKEY_CURRENT_USER. Registreringsdatabasenøglerne HKEY_CURRENT_USER er brugerspecifikke.

  • En opgave eller en forbindelsesstyring kræver, at den aktuelle brugerkonto har de rigtige tilladelser.

Metode 1: Brug af en SQL Server Agent-proxykonto
Opret en SQL Server Agent-proxykonto. Denne proxykonto skal bruge legitimationsoplysninger, der lader SQL Server Agent køre jobbet som den konto, der oprettede pakken, eller som en konto, der har de krævede tilladelser.

Denne metode kan bruges til at dekryptere hemmeligheder og opfylder brugernøglekravene. Denne metode kan imidlertid have begrænset succes, fordi brugernøglerne til SSIS-pakken omfatter den aktuelle bruger og den aktuelle computer. Hvis du derfor flytter pakken til en anden computer, kan denne metode stadig give fejl, også selvom jobtrinnet bruger den rigtige proxykonto.


Metode 2: Indstil SSIS-pakkens egenskab ProtectionLevel til ServerStorage
Skift SSIS-pakkens egenskab ProtectionLevel til ServerStorage. Denne indstilling lagrer pakken i en SQL Server-database og giver mulighed for adgangskontrol via SQL Server-databaseroller.

Metode 3: Indstil SSIS-pakkens egenskab ProtectionLevel til EncryptSensitiveWithPassword
Indstil SSIS-pakkens egenskab ProtectionLevel til EncryptSensitiveWithPassword. Denne indstilling anvender en adgangskode til kryptering. Du kan derefter ændre kommandolinjen i SQL Server Agent-jobtrinnet, så det omfatter denne adgangskode.


Metode 4: Brug konfigurationsfiler til SSIS-pakken
Brug konfigurationsfiler til SSIS-pakken til at lagre følsomme oplysninger, og gem derefter disse konfigurationsfiler i en beskyttet mappe. Du kan derefter ændre egenskaben ProtectionLevel til DontSaveSensitive, så pakken ikke er krypteret og ikke forsøger at gemme hemmeligheder til pakken. Når du kører SSIS-pakken, indlæses de nødvendige oplysninger fra konfigurationsfilen. Sørg for, at konfigurationsfilerne er tilstrækkeligt beskyttede, hvis de indeholder følsomme oplysninger.


Metode 5: Opret en pakkeskabelon
For at få en langsigtet løsning skal du oprette en pakkeskabelon, der bruger et beskyttelsesniveau, der er forskellig fra standardindstillingen. Dette problem opstår ikke i fremtidige pakker.

Status

Denne funktionsmåde er tilsigtet.

Avancerede oplysninger

Trin til genskabelse af problemet

  1. Log på som en bruger, der ikke er en del af gruppen SQLServer2005SQLAgentUser. Du kan f.eks. oprette en lokal bruger.

  2. Opret en SSIS-pakke, og tilføj derefter en ExecuteSQL-opgave. Brug OLE DB-forbindelsesstyring til den lokale msdb-fil ved at bruge følgende streng: ‘Windows-godkendelse’ -SQLSourceType: "Direct Input" -SQLStatement: "sp_who"

  3. Kør pakken for at sikre, den ikke giver fejl.

  4. Bemærk, at egenskaben  ProtectionLevel er indstillet til EncryptSensitiveWithPassword.

  5. Opret et SQL Server Agent-job og et jobtrin. På listen Kør som skal du klikke på SQL Server Agent Service for at køre jobtrinnet.

Teksten i SQL Server Agent Job History viser oplysninger, der ligner følgende:

Dekrypter pakkehemmeligheder

Standardindstillingen for SSIS-pakkens egenskab  ProtectionLevel er EncryptSensitiveWithUserKey. Når pakken er gemt, krypterer SSIS kun de dele af pakken, der indeholder egenskaber, der er angivet som "følsomme", f.eks. adgangskoder, brugernavne og forbindelsesstrenge. Når pakken derfor genindlæses, skal den aktuelle bruger overholde krypteringskravene for at dekryptere de følsomme egenskaber. Den aktuelle bruger behøver imidlertid ikke overholde krypteringskravene for at indlæse pakken. Når du kører pakken via et SQL Server Agent-jobtrin, er standardkontoen SQL Server Agent Service-kontoen. Standardkontoen er højst sandsynligt en anden bruger end pakkens forfatter. SQL Server Agent-jobtrinnet kan derfor indlæse og starte på at køre jobtrinnet, men pakken mislykkes, fordi den ikke kan fuldføre en forbindelse. Pakken kan f.eks. ikke fuldføre en OLE DB-forbindelse eller en FTP-forbindelse. Pakken mislykkes, fordi den ikke kan dekryptere de legitimationsoplysninger, den skal have for at oprette forbindelse.


Vigtigt! Overvej udviklingsprocessen og miljøet for at bestemme, hvilke konti der er nødvendige og bruges på hver computer. Indstillingen EncryptSensitiveWithUserKey for egenskaben ProtectionLevel er en effektiv indstilling. Der bør ikke ses bort fra denne, blot fordi den i første omgang giver problemer med implementeringen. Du kan kryptere pakkerne, når du er logget på den rigtige konto. Du kan også bruge SSIS-kommandopromptværktøjet Dtutil.exe til at ændre beskyttelsesniveauet ved at bruge en .cmd-fil og SQL Server Agent-kommandoundersystemet. Følg f.eks. disse trin. Da du kan bruge værktøjet Dtutil.exe utility i batchfiler og løkker, kan du følge disse trin for flere pakker ad gangen.

  1. Tilpas den pakke, du vil kryptere, ved hjælp af en adgangskode.

  2. Brug værktøjet Dtutil.exe utility via et operativsystem (cmd Exec) – SQL Server Agent-jobtrin for at ændre egenskaben ProtectionLevel til EncryptSensitiveWithUserKey. Denne proces involverer dekryptering af pakken ved hjælp af adgangskoden og derefter kryptering af pakken igen. Den brugernøgle, der bruges til at kryptere pakken, er SQL Server Agent-jobtrinindstillingen på listen Kør som.

    Bemærk! Da nøglen omfatter brugernavnet og computernavnet, kan virkningen af at flytte pakker til en anden computer være begrænset.

Sørg for, at du har detaljerede fejloplysninger om fejlen i SSIS-pakken

I stedet for at bruge de begrænsede oplysninger i SQL Server Agent Job History kan du anvende SSIS-logføring til at sikre, at du har fejloplysninger om fejlen i SSIS-pakken. Du kan også køre pakken ved at bruge kommandoen exec subsystem i stedet for kommandoen SSIS subsystem.

Om SSIS-logføring

SSIS-logføring og -logprovidere giver dig mulighed for at registrere oplysninger om pakkeafviklingen og -fejlene. Pakken logger som standard ikke oplysninger. Du skal konfigurere pakken for at logge oplysninger. Når du har konfigureret pakken til at logge oplysninger, vises der detaljerede oplysninger, der ligner følgende. I dette tilfælde ved du, at der er et problem med tilladelser:

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,Kan ikke oprette forbindelse til FTP-server med "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,Kan ikke registrere forbindelsen "user01.msdb". Forbindelsen er muligvis ikke konfigureret korrekt, eller også har du ikke de rigtige tilladelser til denne forbindelse.

Om kommandoen exec subsystem og outputoplysninger

Ved at bruge tilgangen med kommandoen exec subsystem kan du tilføje fyldige konsollogføringsparametre til SSIS-kommandolinjen for at kalde den eksekverbare fil Dtexec.exe på SSIS-kommandolinjen. Derudover kan du bruge outputfilens avancerede jobfunktion. Du kan også bruge indstillingen Include Step Output in the history til at omdirigere logføringsoplysningerne til en fil eller SQL Server Agent Job History.

Følgende er et eksempel på en kommandolinje:
  dtexec.exe /FILE "C:\_work\SSISPackages\ProtectionLevelTest\ProtectionLevelTest\AgentTesting.dtsx" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING V /CONSOLELOG NCOSGXMT

/console logging returnerer oplysninger, der ligner følgende:
  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

Referencer

Du kan finde flere oplysninger om et lignende problem ved at klikke på nedenstående artikelnummer for at få vist artiklen i Microsoft Knowledge Base. Artiklen er evt. på engelsk:

904800 Du modtager en fejlmeddelelse om "fejl under indlæsning", når du forsøger at køre en SQL Server 2005 Integration Services-pakke i SQL Server 2005

Du kan finde flere oplysninger om, hvordan værktøjet Dtutil.exe bruges i batchhandlinger, ved at klikke på nedenstående artikelnummer for at få vist artiklen i Microsoft Knowledge Base:

906562 Sådan bruger du værktøjet dtutil (Dtutil.exe) til at indstille sikkerhedsniveauet i en batch af SQL Server Integration Services-pakker (SSIS) i SQL Server 2005

Yderligere oplysninger om, hvordan du opretter pakkeskabeloner, finder du ved at klikke på nedenstående artikelnummer for at få vist artiklen i Microsoft Knowledge Base:

908018 Sådan opretter du en pakkeskabelon i SQL Server Business Intelligence Development Studio



Yderligere oplysninger om SSIS-pakkesikkerhed og egenskaben ProtectionLevel kan du se i emnet "Security Considerations for Integration Services" i bøger om SQL Server 2005 Books Online.

Brugerne er desværre ikke klar over, at standardindstillingerne i agentjobtrinnet sætter dem i denne tilstand. Du kan finde flere oplysninger om SQL Server Agent-proxier og SSIS i følgende emner i SQL Server 2005 Books Online:

  • Planlægning af pakkeafvikling i SQL Server Agent

  • Oprettelse af SQL Server Agent-proxier

Har du brug for mere hjælp?

Udvid dine færdigheder
Gå på opdagelse i kurser
Få nye funktioner først
Deltag i Microsoft insiders

Var disse oplysninger nyttige?

Hvor tilfreds er du med kvaliteten af sproget?
Hvad påvirkede din oplevelse?

Tak for din feedback!

×