SSIS-pakket wordt niet uitgevoerd wanneer aangeroepen vanuit een SQL Server Agent taakstap

Van toepassing: SQL Server 2008 DeveloperSQL Server 2008 EnterpriseSQL Server 2008 Standard

Symptomen


Wanneer u een pakket van Microsoft SQL Server 2005 Integration Services (SSIS) vanuit een taakstap SQL Server Agent aanroept, wordt het SSIS-pakket niet uitgevoerd. Echter als het SSIS-pakket niet te wijzigen, wordt het uitgevoerd met succes buiten SQL Server Agent.

Oplossing


Dit probleem is op te lossen door een van de volgende methoden te gebruiken. De meest geschikte methode is afhankelijk van de omgeving en de reden dat het pakket is mislukt. Dit zijn redenen waardoor het pakket kon mislukken zijn:
  • De gebruikersaccount die wordt gebruikt voor het uitvoeren van het pakket onder SQL Server Agent verschilt van de auteur van het oorspronkelijke pakket.
  • De gebruikersaccount heeft niet de vereiste machtigingen om verbindingen te maken of toegang tot bronnen buiten het SSIS-pakket.
Het pakket kan niet worden uitgevoerd in de volgende scenario's:
  • De huidige gebruiker decoderen niet geheimen uit het pakket. In dit scenario kan zich voordoen als de huidige rekening of de rekening uitvoering van de auteur van het oorspronkelijke pakket verschilt en de instelling van de eigenschap ProtectionLevel van het pakket kunt niet de huidige gebruiker geheimen in het pakket wordt gedecodeerd.
  • Een SQL Server-verbinding die gebruikmaakt van geïntegreerde beveiliging mislukt omdat de huidige gebruiker niet de vereiste machtigingen beschikt.
  • Toegang tot het bestand mislukt omdat de huidige gebruiker niet de vereiste machtigingen om te schrijven naar de bestandsshare die de connection manager wordt geopend. In dit scenario kan zich bijvoorbeeld voordoen met tekst aanmelden providers die geen van een aanmeldings-id en een wachtwoord gebruikmaken. In dit scenario kan ook optreden bij elke taak die afhankelijk van het bestand Verbindingsbeheer, zoals een taak SSIS bestand systeem is.
  • Een configuratie SSIS-pakket op basis van het register worden de registersleutels HKEY_CURRENT_USER gebruikt. De registersleutels voor HKEY_CURRENT_USER zijn bepaalde gebruiker.
  • Een taak of een manager van de verbinding is vereist dat de huidige gebruikersaccount de juiste machtigingen heeft.
Methode 1: Gebruik een proxy-account van SQL Server Agent
Een proxy-account van SQL Server Agent maken. Deze proxyaccount moet een referentie waarmee de taak wordt uitgevoerd als de account die het pakket heeft gemaakt of als een account met de vereiste machtigingen van SQL Server Agent gebruiken.

Deze methode werkt om te decoderen geheimen en voldoet aan de vereisten voor de gebruiker. Deze methode kan hebben echter slechts beperkt succes omdat de gebruikerssleutels SSIS-pakket hebben betrekking op de huidige gebruiker en de huidige computer. Dus als u het pakket naar een andere computer verplaatst, deze methode kan nog steeds niet, zelfs als de taakstap maakt gebruik van de juiste proxy-account.


Methode 2: Stel de eigenschap SSIS Package ProtectionLevel op ServerStorage
Wijzig de eigenschap pakket SSIS ProtectionLevel in ServerStorage. Deze instelling wordt het pakket opgeslagen in een SQL Server-database en kan toegang beheren door middel van rollen van SQL Server-database.

Methode 3: Stel de eigenschap SSIS Package ProtectionLevel op EncryptSensitiveWithPassword
Wijzig de eigenschap pakket SSIS ProtectionLevel in EncryptSensitiveWithPassword. Deze instelling wordt een wachtwoord voor het coderen. Vervolgens kunt u de opdrachtregel van SQL Server Agent taak stap te nemen dit wachtwoord wijzigen.


Methode 4: Gebruik SSIS-pakket configuratiebestanden
Configuratiebestanden SSIS-pakket gebruiken voor het opslaan van vertrouwelijke informatie en deze configuratiebestanden op te slaan in een beveiligde map. U kunt vervolgens de eigenschap ProtectionLevel om DontSaveSensitive te wijzigen zodat het pakket niet is gecodeerd en probeer niet opslaan in het pakket geheimen. Wanneer u het pakket SSIS uitvoert, wordt de vereiste informatie in het configuratiebestand geladen. Zorg ervoor dat de configuratiebestanden afdoende worden beveiligd als deze vertrouwelijke informatie bevatten.


Methode 5: Een pakketsjabloon maken
Voor een oplossing op lange termijn, een pakketsjabloon maken die een niveau van bescherming die van de standaardinstelling verschilt gebruikt. Dit probleem wordt niet uitgevoerd in toekomstige pakketten.

Status


Dit gedrag is inherent aan het ontwerp.

Geavanceerde informatie


Stappen om het probleem te reproduceren

  1. Meld u aan als een gebruiker die geen deel van de groep SQLServer2005SQLAgentUser uitmaakt. U kunt bijvoorbeeld een lokale gebruikersaccount maken.
  2. Een SSIS-pakket maken en voeg vervolgens de taak van een ExecuteSQL. Een OLE DB-Verbindingsbeheer gebruiken naar het lokale msdb-bestand met behulp van de volgende tekenreeks: Windows-verificatie - SQLSourceType: 'Directe Input' - SQLStatement: 'sp_who'
  3. Het pakket om ervoor te zorgen dat deze met succes wordt uitgevoerd.
  4. U ziet dat de eigenschap ProtectionLevel is ingesteld op EncryptSensitiveWithPassword.
  5. Een SQL Server Agent-taak en een taakstap maken. Klik in de lijst Uitvoeren als SQL Server Agent-Service voor het uitvoeren van de taakstap.
De tekst in de geschiedenis van de SQL Server Agent wordt informatie van de volgende strekking weergegeven:

Pakket geheimen decoderen

De standaardinstelling voor het pakket SSIS ProtectionLevel eigenschap is EncryptSensitiveWithUserKey. Wanneer het pakket wordt opgeslagen, codeert SSIS alleen de onderdelen van het pakket met de eigenschappen die zijn gemarkeerd als 'gevoelige,"zoals wachtwoorden en gebruikersnamen verbindingsreeksen. Dus wanneer het pakket opnieuw wordt geladen, de huidige gebruiker moet voldoen aan de codering voor de vertrouwelijke eigenschappen om te worden gedecodeerd. De huidige gebruiker hoeft echter niet te voldoen aan de eisen van de codering voor het laden van het pakket. Wanneer u het pakket via een SQL Server Agent-taakstap uitvoert, is de standaardaccount voor de SQL Server Agent-Service-account. De standaardrekening is waarschijnlijk een andere gebruiker dan de auteur van het pakket. Daarom SQL Server Agent taakstap kunt laden en de taakstap wordt uitgevoerd, maar wordt het pakket is mislukt omdat een verbinding kan niet worden voltooid. Het pakket kan bijvoorbeeld niet voltooien een OLE DB-verbinding of een FTP-verbinding. Het pakket mislukt, omdat deze de referenties waarmee verbinding moet hebben niet decoderen.


Belangrijk Rekening houden met het ontwikkelingsproces en het milieu om te bepalen welke accounts nodig en gebruikt op elke computer. De instelling van de eigenschap ProtectionLevel van de EncryptSensitiveWithUserKey is een krachtige instelling. Deze instelling moet niet worden gedisconteerd, omdat deze implementatie complicaties in eerste instantie veroorzaakt. U kunt de pakketten coderen wanneer u bent aangemeld bij de desbetreffende rekening. U kunt ook het opdrachtregelprogramma Dtutil.exe SSIS de niveaus van bescherming te wijzigen met behulp van een .cmd-bestand en de SQL Server Agent en seingevingssysteem. Bijvoorbeeld als volgt te werk. Omdat u het hulpprogramma Dtutil.exe in batchbestanden en lussen gebruiken kunt, kunt u als volgt te werk voor meerdere pakketten tegelijk.
  1. Het pakket dat u versleutelen wilt met een wachtwoord wijzigen.
  2. Gebruik het hulpprogramma Dtutil.exe tot en met een besturingssysteem (Exec cmd) SQL Server Agent taak wijzigen in de eigenschap ProtectionLevel EncryptSensitiveWithUserKey. Dit proces omvat het pakket te decoderen met behulp van het wachtwoord en het pakket vervolgens opnieuw coderen. De sleutel van de gebruiker die wordt gebruikt voor het coderen van het pakket is de SQL Server Agent taakstap instellen in het vak Uitvoeren als .

    Opmerking Omdat de sleutel de naam en de naam van de computer bevat, is het effect van de pakketten te verplaatsen naar een andere computer kan worden beperkt.

Zorg ervoor dat u informatie over de mislukte SSIS-pakket gedetailleerde hebt

U kunt niet vertrouwen op de beperkte details in de SQL Server agentgeschiedenis, SSIS logboekregistratie om ervoor te zorgen dat er informatie over de mislukte SSIS-pakket. U kunt het pakket ook uitvoeren met de opdracht exec subsysteem in plaats van de opdracht SSIS subsysteem.

Over SSI's vastleggen

SSIS logboeken en logboekbestanden providers kunnen u details over het pakket kan worden uitgevoerd en fouten vastgelegd. Standaard wordt het pakket niet informatie geregistreerd. U moet het pakket als u logboekgegevens wilt configureren. Wanneer u het pakket aan te melden informatie configureert, wordt gedetailleerde informatie weergegeven met de volgende strekking weergegeven. In dit geval weet u dat het is een probleem met machtigingen:

OnError, domeinnaam, domeinnaam\gebruikersnaam, FTP-Task,{C73DE41C-D0A6-450A-BB94-DF6D913797A1},{2F0AF5AF-2FFD-4928-88EE-1B58EB431D74},4/28/2006 1:51:59 PM, 28/4/2006 1:51:59 PM,-1073573489, 0 x, kan geen verbinding maken met FTP-server met behulp van ' FTP Connection Manager '.

OnError, domeinnaam, domeinnaam\gebruikersnaam, Execute SQL Task,{C6C7286D-57D4-4490-B12D-AC9867AE5762},{F5761A49-F2F9-4575-9E2B-B3D381D6E1F3},4/28/2006 4:07:00 PM, 28/4/2006 4:07:00 PM,-1073573396, 0 x, kan geen verbinding "user01.msdb" te verkrijgen. Verbinding niet juist geconfigureerd of u hebt niet de juiste machtigingen voor deze verbinding.

Over de opdracht exec subsysteem en voeren informatie

Met behulp van de opdracht benadering van exec subsysteem, kunt u uitgebreide console logging schakelopties voor de opdrachtregel SSIS aan te roepen van het Dtexec.exe SSIS uitvoerbaar opdrachtregelbestand toevoegen. Daarnaast kunt u de functie voor geavanceerde taak van het uitvoerbestand gebruiken. U kunt ook de optie Stap Output opnemen in de geschiedenis de logboekgegevens omleiden naar een bestand of naar geschiedenis van de SQL Server Agent.

Hier volgt een voorbeeld van een opdrachtregel:
 
dtexec.exe /FILE "C:\_work\SSISPackages\ProtectionLevelTest\ProtectionLevelTest\AgentTesting.dtsx" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF  /REPORTING V  /CONSOLELOG NCOSGXMT 


De registratie/console geeft als resultaat de details van de volgende strekking:
 
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 

Referenties


Voor meer informatie over een soortgelijk probleem klikt u op het volgende artikel in de Microsoft Knowledge Base:

904800 u een foutbericht 'Fout bij het laden' wanneer u probeert een pakket van SQL Server 2005 Integration Services uitvoeren in SQL Server 2005

Voor meer informatie over het gebruik van het hulpprogramma Dtutil.exe in batchbewerkingen, klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base:

906562 het gebruik van het hulpprogramma dtutil (Dtutil.exe) voor het instellen van het beveiligingsniveau van een reeks pakketten van SQL Server Integration Services (SSIS) in SQL Server 2005

Voor meer informatie over het maken van sjablonen pakket, klikt u op het volgende artikel in de Microsoft Knowledge Base:

908018 het maken van een pakketsjabloon in SQL Server Business Intelligence Development Studio



Zie het onderwerp 'Security overwegingen voor Integration Services' in SQL Server 2005 Books Online voor meer informatie over beveiliging voor SSIS-pakket en de eigenschap ProtectionLevel .

Helaas zijn gebruikers niet op de hoogte dat standaard agent stap taakinstellingen opslaan in deze toestand. Zie de volgende onderwerpen in SQL Server 2005 Books Online voor meer informatie over SQL Server Agent-proxy's en SSIS:
  • Pakket kan worden uitgevoerd in SQL Server Agent plannen
  • Maken van SQL Server Agent-proxy 's