Sintomi
Quando si chiama un pacchetto di Microsoft SQL Server 2005 Integration Services (SSIS) da un passaggio di processo di agente SQL Server, il pacchetto SSIS non viene eseguito. Tuttavia, se non si modificano il pacchetto SSIS, verrà eseguito correttamente di fuori di SQL Server Agent.
Risoluzione
Per risolvere questo problema, utilizzare uno dei metodi descritti di seguito. Il metodo più appropriato dipende l'ambiente e il motivo per cui il pacchetto non riuscito. Di seguito sono elencati i motivi che può avere esito negativo del pacchetto:
-
L'account utente utilizzato per eseguire il pacchetto in Agente SQL Server differisce dall'autore originale.
-
L'account utente non dispone di autorizzazioni necessarie per rendere le connessioni o per accedere alle risorse all'esterno del pacchetto SSIS.
Il pacchetto non venga eseguito nei seguenti scenari:
-
L'utente corrente: Impossibile decrittografare i segreti dal pacchetto. Questo scenario può verificarsi se il conto corrente o l'account di esecuzione è diverso dall'autore del pacchetto originale e l'impostazione della proprietà del pacchetto ProtectionLevel non consentono all'utente corrente decrittografare i segreti nel pacchetto.
-
Una connessione di SQL Server che utilizza la protezione integrata non riesce perché l'utente corrente non dispone di autorizzazioni necessarie.
-
Accesso ai file non riesce perché l'utente corrente non dispone di autorizzazioni necessarie per scrivere la condivisione di file che accede a connection manager. Ad esempio, questo scenario può verificarsi con i provider di log di testo che non utilizzano un account di accesso e una password. Questo scenario può verificarsi anche con qualsiasi attività che dipende la gestione connessione file, ad esempio un'attività di sistema file SSIS.
-
Una configurazione del pacchetto SSIS basate sul Registro di sistema utilizza le chiavi di registro HKEY_CURRENT_USER. Le chiavi di registro HKEY_CURRENT_USER sono specifici dell'utente.
-
Un'attività o una gestione connessione richiede che l'account utente corrente disponga delle autorizzazioni corrette.
Metodo 1: Utilizzare un account proxy di agente SQL Server
Creare un account proxy di agente SQL Server. Questo account proxy è necessario utilizzare le credenziali che consente di agente SQL Server esegue il processo come l'account che ha creato il pacchetto o un account che disponga delle autorizzazioni necessarie.
Questo metodo funziona per decrittografare i segreti e soddisfa i requisiti chiavi dall'utente. Tuttavia, questo metodo limitato successo poiché le chiavi utente pacchetto SSIS implicano l'utente corrente e il computer corrente. Pertanto, se si sposta il pacchetto a un altro computer, questo metodo potrebbe avere esito negativo anche se il passaggio di processo utilizza l'account proxy corretto.
Metodo 2: Impostare la proprietà ProtectionLevel pacchetto SSIS ServerStorage
Impostare la proprietà del pacchetto SSIS ProtectionLevel ServerStorage. Questa impostazione Archivia il pacchetto in un database di SQL Server e consente il controllo dell'accesso tramite i ruoli di database di SQL Server.
Metodo 3: Impostare la proprietà ProtectionLevel pacchetto SSIS EncryptSensitiveWithPassword
Impostare la proprietà del pacchetto SSIS ProtectionLevel EncryptSensitiveWithPassword. Questa impostazione viene utilizzata una password per la crittografia. È quindi possibile modificare la riga di comando di passaggio processo di agente SQL Server per includere la password.
Il metodo 4: File di configurazione del pacchetto SSIS di utilizzare
Utilizzare il file di configurazione del pacchetto SSIS per memorizzare informazioni riservate e quindi archiviare questi file di configurazione in una cartella protetta. Per cambiare la proprietà ProtectionLevel per DontSaveSensitive in modo che il pacchetto non è crittografato e non tenta di salvare i segreti del 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 utilizza un livello di protezione diverso da quello predefinito. Questo problema non si verificherà in futuro i pacchetti.
Stato
Questo è il comportamento previsto.
Informazioni avanzate
Procedura per riprodurre il problema
-
Accedere come utente non fa parte del gruppo SQLServer2005SQLAgentUser. Ad esempio, è possibile creare un utente locale.
-
Creare un pacchetto SSIS e quindi aggiungere un'attività ExecuteSQL. Utilizzare una gestione connessione OLE DB per il file locale msdb utilizzando la seguente stringa: 'Autenticazione di Windows' - SQLSourceType: "Input diretto" - SQLStatement: "sp_who"
-
Eseguire il pacchetto per assicurarsi che venga eseguito correttamente.
-
Si noti che la proprietà ProtectionLevel è impostata su EncryptSensitiveWithPassword.
-
Creare un processo di agente SQL Server e un passaggio di processo. Nell'elenco Esegui come , fare clic su Servizio di agente SQL Server per eseguire il passaggio di processo.
Il testo nella cronologia processo agente SQL Server vengono visualizzate informazioni analoghe alle seguenti:
Decrittografare i segreti del pacchetto
L'impostazione predefinita per il pacchetto SSIS proprietà ProtectionLevel è EncryptSensitiveWithUserKey. Quando il pacchetto viene salvato, SSIS crittografa solo le parti del pacchetto che contengono le proprietà contrassegnate come "riservate," come password, nomi utente e le stringhe di connessione. Pertanto, quando il pacchetto viene ricaricato, l'utente corrente deve soddisfare i requisiti di crittografia per le proprietà riservate da decrittografare. Tuttavia, l'utente corrente non deve soddisfare i requisiti di crittografia per caricare il pacchetto. Quando si esegue il pacchetto tramite il passaggio di un processo di agente SQL Server, l'account predefinito è l'account del servizio di agente SQL Server. Questo account predefinito è molto probabile che un utente diverso dall'autore del pacchetto. Pertanto, il passaggio di processo SQL Server Agent è possibile caricare e iniziare a eseguire il passaggio di processo, ma il pacchetto non riesce perché non riesce a completare una connessione. Ad esempio, il pacchetto Impossibile completare una connessione OLE DB o una connessione FTP. Il pacchetto non riesce perché Impossibile decrittografare le credenziali che devono essere per la connessione.
Importante Considerare il processo di sviluppo e l'ambiente per determinare quali account sono necessari e su ciascun computer. Impostazione della proprietà ProtectionLevel EncryptSensitiveWithUserKey è un'impostazione potente. Questa impostazione non dovrebbe essere scontata poiché implica complicazioni distribuzione inizialmente. È possibile crittografare i pacchetti quando si è connessi all'account appropriato. Inoltre, è possibile utilizzare l'utilità della riga di comando SSIS Dtutil.exe per modificare i livelli di protezione utilizzando un file. cmd e il sottosistema di comando dell'agente SQL Server. Ad esempio, attenersi alla seguente procedura. Poiché è possibile utilizzare l'utilità Dtutil.exe in cicli e file batch, è possibile seguire questi passaggi per diversi pacchetti allo stesso tempo.
-
Modificare il pacchetto che si desidera crittografare utilizzando una password.
-
Utilizzare l'utilità Dtutil.exe tramite un passaggio di processo di agente SQL Server del sistema operativo (Exec cmd) per modificare la proprietà ProtectionLevel per EncryptSensitiveWithUserKey. Questo processo prevede la decrittografia del pacchetto utilizzando la password e quindi crittografare nuovamente il pacchetto. La chiave utente che viene utilizzata per crittografare il pacchetto è il passaggio di processo SQL Server Agent impostazione nell'elenco Esegui come .
Nota: Poiché la chiave include il nome utente e il nome del computer, è possibile limitare l'effetto di spostare i pacchetti a un altro computer.
Assicurarsi che si dispone di informazioni sull'errore pacchetto SSIS
Invece di basarsi sui dettagli limitati nella cronologia dei processi di agente SQL Server, è possibile utilizzare SSIS registrazione per assicurarsi di disporre delle informazioni di errore sull'errore pacchetto SSIS. È anche possibile eseguire il pacchetto utilizzando il comando di sottosistema exec anziché il comando di sottosistema SSIS.
Informazioni sulla registrazione di SSIS
Il provider di registrazione e di log SSIS consentono di acquisire informazioni dettagliate sull'esecuzione del pacchetto e gli 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, verranno visualizzate informazioni dettagliate che è simile al seguente. In questo caso, si saprà che si tratta di un problema di autorizzazioni:
OnError, NomeDominio, nomedominio\nomeutente, 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, Impossibile connettersi al server FTP utilizzando "gestione connessione FTP".
OnError, NomeDominio, nomedominio\nomeutente, 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, Impossibile acquisire la connessione "user01.msdb". Connessione non è configurato correttamente o non si dispone di autorizzazioni appropriate per la connessione.
Sul comando di sottosistema exec e informazioni di output
Utilizzando l'approccio di comando di sottosistema exec, aggiungere dettagliato console registrazione passa alla riga di comando SSIS per chiamare il file eseguibile della riga di comando Dtexec.exe SSIS. È inoltre possibile utilizzare la funzionalità avanzate di processo del file di output. È anche possibile utilizzare l'opzione Includi Output passaggio nella cronologia di reindirizzare le informazioni di registrazione in un file o per la cronologia dei processi di agente SQL Server.
Di seguito è riportato un esempio di una riga di comando:
dtexec.exe /FILE
"C:\_work\SSISPackages\ProtectionLevelTest\ProtectionLevelTest\AgentTesting.dtsx" /MAXCONCURRENT " -1
" /CHECKPOINTING OFF /REPORTING V /CONSOLELOG NCOSGXMT
La registrazione /console restituisce dettagli analoghi 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 ulteriori informazioni su un problema simile, fare clic sul numero riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
904800 viene visualizzato un messaggio di errore "Errore durante il caricamento" quando si tenta di eseguire un pacchetto di SQL Server 2005 Integration Services in SQL Server 2005
Per ulteriori informazioni su come utilizzare l'utilità Dtutil.exe nelle operazioni batch, fare clic sul numero riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
906562 come utilizzare l'utilità dtutil (Dtutil.exe) per impostare il livello di protezione di un batch di pacchetti di SQL Server Integration Services (SSIS) in SQL Server 2005
Per ulteriori informazioni su come creare modelli di pacchetto, fare clic sul numero seguente per visualizzare l'articolo della Microsoft Knowledge Base:
Come creare un modello di pacchetto in SQL Server Business Intelligence Development Studio 908018
Per ulteriori informazioni sulla protezione del pacchetto SSIS e la proprietà ProtectionLevel , vedere l'argomento "Considerazioni per integrazione servizi di protezione" nella documentazione in linea di SQL Server 2005.
Sfortunatamente, gli utenti non sono consapevoli che impostazioni passaggio processo agente inserirli in questo stato. Per ulteriori informazioni sul proxy di agente SQL Server e SSIS, vedere i seguenti argomenti nella documentazione in linea di SQL Server 2005:
-
Pianificazione dell'esecuzione pacchetto in SQL Server Agent
-
Creazione di proxy di agente SQL Server