Il pacchetto SSIS non viene eseguito quando viene chiamato da un passaggio di processo SQL Server Agent
Questo articolo consente di risolvere il problema che si verifica quando si chiama un pacchetto SSIS da un passaggio di processo SQL Server Agent.
Versione originale del prodotto: SQL Server
Numero KB originale: 918760
Sintomi
Quando si chiama un pacchetto di Microsoft SQL Server Integration Services (SSIS) da un passaggio di processo SQL Server Agent, il pacchetto SSIS non viene eseguito. Tuttavia, se non si modifica il pacchetto SSIS, verrà eseguito correttamente all'esterno di SQL Server Agent.
Risoluzione
Per risolvere il problema, utilizzare uno dei metodi riportati di seguito: Il metodo più appropriato dipende dall'ambiente e dal motivo per cui il pacchetto non è riuscito. I motivi per cui il pacchetto potrebbe non essere riuscito sono i seguenti:
- L'account utente usato per eseguire il pacchetto in SQL Server Agent differisce dall'autore del pacchetto originale.
- L'account utente non dispone delle autorizzazioni necessarie per stabilire connessioni o per accedere alle risorse esterne al pacchetto SSIS.
Il pacchetto potrebbe non essere eseguito negli scenari seguenti:
- L'utente corrente non può decrittografare i segreti dal pacchetto. Questo scenario può verificarsi se l'account corrente o l'account di esecuzione è diverso dall'autore del pacchetto originale e l'impostazione della proprietà ProtectionLevel del pacchetto non consente all'utente corrente di decrittografare i segreti nel pacchetto.
- Una connessione SQL Server che usa la sicurezza integrata non riesce perché l'utente corrente non dispone delle autorizzazioni necessarie.
- L'accesso ai file non riesce perché l'utente corrente non dispone delle autorizzazioni necessarie per scrivere nella condivisione file a cui accede la gestione connessione. Ad esempio, questo scenario può verificarsi con i provider di log di testo che non usano un account di accesso e una password. Questo scenario può verificarsi anche con qualsiasi attività che dipende dalla gestione connessione file, ad esempio un'attività del file system SSIS.
- Una configurazione del pacchetto SSIS basata sul Registro di sistema usa le chiavi del
HKEY_CURRENT_USER
Registro di sistema. LeHKEY_CURRENT_USER
chiavi del Registro di sistema sono specifiche dell'utente. - Un'attività o una gestione connessione richiede che l'account utente corrente disponga delle autorizzazioni corrette.
Per risolvere il problema, usare i metodi seguenti:
Metodo 1: usare un account proxy SQL Server Agent. Creare un account proxy SQL Server Agent. Questo account proxy deve usare una credenziale che consenta SQL Server Agent eseguire il processo come account che ha creato il pacchetto o come account con le autorizzazioni necessarie.
Questo metodo consente di decrittografare i segreti e soddisfa i requisiti chiave dell'utente. Tuttavia, questo metodo può avere esito positivo limitato perché le chiavi utente del pacchetto SSIS coinvolgono l'utente corrente e il computer corrente. Pertanto, se si sposta il pacchetto in un altro computer, questo metodo potrebbe comunque non riuscire, anche se il passaggio del processo usa l'account proxy corretto.
Metodo 2: impostare la proprietà Pacchetto
ProtectionLevel
SSIS su ServerStorage. Modificare la proprietà SSIS Package ProtectionLevel in ServerStorage. Questa impostazione archivia il pacchetto in un database SQL Server e consente il controllo di accesso tramite SQL Server ruoli del database.Metodo 3: impostare la proprietà Pacchetto
ProtectionLevel
SSIS suEncryptSensitiveWithPassword
. Modificare la proprietà PacchettoProtectionLevel
SSIS inEncryptSensitiveWithPassword
. Questa impostazione usa una password per la crittografia. È quindi possibile modificare la riga di comando del passaggio del processo SQL Server Agent per includere questa password.Metodo 4: usare i file di configurazione del pacchetto SSIS. Usare i file di configurazione del pacchetto SSIS per archiviare le informazioni riservate e quindi archiviare questi file di configurazione in una cartella protetta. È quindi possibile modificare la
ProtectionLevel
proprietà inDontSaveSensitive
in modo che il pacchetto non sia crittografato e non tenti di salvare i segreti nel pacchetto. Quando si esegue il pacchetto SSIS, le informazioni necessarie vengono caricate dal file di configurazione. Assicurarsi che i file di configurazione siano adeguatamente protetti se contengono informazioni riservate.Metodo 5: Creare un modello di pacchetto. Per una risoluzione a lungo termine, creare un modello di pacchetto che usa un livello di protezione diverso dall'impostazione predefinita. Questo problema non si verificherà nei pacchetti futuri.
Procedura per riprodurre il problema
- Accedere come utente che non fa parte del gruppo SQLServerSQLAgentUser. Ad esempio, è possibile creare un utente locale.
- Creare un pacchetto SSIS e quindi aggiungere un'attività ExecuteSQL. Usare una gestione connessione OLE DB al file msdb locale usando la stringa seguente:
'Windows Authentication' -SQLSourceType: "Direct Input" -SQLStatement: "sp_who"
. - Eseguire il pacchetto per assicurarsi che venga eseguito correttamente.
- La
ProtectionLevel
proprietà è impostataEncryptSensitiveWithPassword
su . - Creare un processo SQL Server Agent e un passaggio di processo. Nell'elenco RunAs fare clic su SQL Server Agent Service (Servizio SQL Server Agent) per eseguire il passaggio del processo. Il testo nella cronologia processi SQL Server Agent visualizza informazioni simili alle seguenti:
Decrittografare i segreti del pacchetto
L'impostazione predefinita per la proprietà del pacchetto ProtectionLevel
SSIS è EncryptSensitiveWithUserKey
. Quando il pacchetto viene salvato, SSIS crittografa solo le parti del pacchetto che contengono proprietà contrassegnate, sensitive
ad esempio password, nomi utente e stringhe di connessione. Pertanto, quando il pacchetto viene ricaricato, l'utente corrente deve soddisfare i requisiti di crittografia per le sensitive
proprietà da decrittografare. Tuttavia, l'utente corrente non deve soddisfare i requisiti di crittografia per caricare il pacchetto. Quando si esegue il pacchetto tramite un passaggio di processo SQL Server Agent, l'account predefinito è l'account del servizio SQL Server Agent. Questo account predefinito è molto probabilmente un utente diverso dall'autore del pacchetto. Pertanto, il passaggio del processo SQL Server Agent può caricare e iniziare a eseguire il passaggio del processo, ma il pacchetto ha esito negativo perché non può completare una connessione. Ad esempio, il pacchetto non può completare una connessione OLE DB o FTP. Il pacchetto ha esito negativo perché non può decrittografare le credenziali che deve avere per connettersi.
Importante
Prendere in considerazione il processo di sviluppo e l'ambiente per determinare quali account sono necessari e usati in ogni computer. L'impostazione EncryptSensitiveWithUserKey della ProtectionLevel
proprietà è un'impostazione potente. Questa impostazione non deve essere scontata perché all'inizio causa complicazioni di distribuzione. È possibile crittografare i pacchetti quando si è connessi all'account appropriato. È anche possibile usare l'utilità del prompt dei comandi Dtutil.exe SSIS per modificare i livelli di protezione usando un file di .cmd e il sottosistema di comandi SQL Server Agent. Seguire, ad esempio, questa procedura. Poiché è possibile usare l'utilità Dtutil.exe nei file batch e nei cicli, è possibile seguire questa procedura per diversi pacchetti contemporaneamente.
Modificare il pacchetto da crittografare usando una password.
Usare l'utilità Dtutil.exe tramite un passaggio del processo di SQL Server Agent del sistema operativo (cmd Exec) per modificare la
ProtectionLevel
proprietà inEncryptSensitiveWithUserKey
. Questo processo prevede la decrittografia del pacchetto usando la password e quindi la crittografia del pacchetto. La chiave utente usata per crittografare il pacchetto è l'impostazione SQL Server Agent passaggio del processo nell'elenco RunAs.Nota
Poiché la chiave include il nome utente e il nome del computer, l'effetto dello spostamento dei pacchetti in un altro computer potrebbe essere limitato.
Assicurarsi di avere informazioni dettagliate sull'errore del pacchetto SSIS
Anziché basarsi sui dettagli limitati nella cronologia processi SQL Server Agent, è possibile usare la registrazione SSIS per assicurarsi di avere informazioni sull'errore del pacchetto SSIS. È anche possibile eseguire il pacchetto usando il comando del sottosistema exec anziché il comando del sottosistema SSIS.
Informazioni sulla registrazione SSIS
I provider di log e registrazione SSIS consentono di acquisire i dettagli sull'esecuzione del pacchetto e sugli errori. Per impostazione predefinita, il pacchetto non registra le informazioni. È necessario configurare il pacchetto per registrare le informazioni. Quando si configura il pacchetto per registrare le informazioni, vengono visualizzate informazioni dettagliate simili alle seguenti. In questo caso, si saprà che si tratta di un problema di autorizzazioni:
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.
Informazioni sul comando del sottosistema exec e sulle informazioni di output
Usando l'approccio del comando del sottosistema exec, si aggiungono opzioni dettagliate di registrazione della console alla riga di comando SSIS per chiamare il file eseguibile della riga di comando SSIS Dtexec.exe. Si usa anche la funzionalità Processo avanzato del file di output. È anche possibile usare l'opzione Includi output passaggio nella cronologia per reindirizzare le informazioni di registrazione a un file o alla cronologia processi SQL Server Agent.
Di seguito è riportato un esempio di riga di comando:
dtexec.exe /FILE "C:\_work\SSISPackages\ProtectionLevelTest\ProtectionLevelTest\AgentTesting.dtsx" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING V /CONSOLELOG NCOSGXMT
La registrazione della console restituisce dettagli simili ai seguenti:
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
Riferimenti
Per altre informazioni su un problema simile, vedere Messaggio di errore "Caricamento degli errori" quando si tenta di eseguire un pacchetto di Integration Services SQL Server 2005 in SQL Server 2005
Per altre informazioni su come usare l'utilità Dtutil.exe nelle operazioni batch, vedere Come usare l'utilità dtutil (Dtutil.exe) per impostare il livello di protezione di un batch di pacchetti SQL Server Integration Services (SSIS) in SQL Server 2005
Per altre informazioni su come creare modelli di pacchetto, vedere Come creare un modello di pacchetto in SQL Server Business Intelligence Development Studio
Per altre informazioni sulla sicurezza dei pacchetti SSIS e sulla
ProtectionLevel
proprietà , vedere l'argomento Considerazioni sulla sicurezza per Integration Services nella documentazione online di SQL Server 2005.
Sfortunatamente, gli utenti non sono a conoscenza del fatto che le impostazioni predefinite del passaggio del processo dell'agente le inseriscono in questo stato. Per altre informazioni sui proxy SQL Server Agent e SSIS, vedere gli argomenti seguenti nella documentazione online di SQL Server 2005:
- Pianificazione dell'esecuzione del pacchetto in SQL Server Agent
- Creazione di proxy di SQL Server Agent
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per