Artigo: 918760 - Última revisão: quarta-feira, 30 de Setembro de 2009 - Revisão: 2.0

Um pacote SSIS não funciona quando chamar o pacote SSIS a partir de um passo de tarefa do agente do SQL Server

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sintomas

Quando chama um pacote do Microsoft SQL Server 2005 Integration Services (SSIS) a partir de um passo de tarefa do agente do SQL Server, o pacote SSIS não funciona. No entanto, se não modificar o pacote SSIS, será executado com êxito fora agente do SQL Server.

Causa

Este problema ocorre quando uma das seguintes condições for verdadeira:
  • A conta de utilizador que é utilizada para executar o pacote em SQL Server Agent difere do autor original do pacote.
  • A conta de utilizador não tem as permissões necessárias para efectuar ligações de ou para aceder a recursos fora pacote SSIS.
O pacote pode não funcionar nos seguintes cenários:
  • O utilizador actual não é possível desencriptar segredos do pacote. Este cenário pode ocorrer se a conta actual ou a conta de execução difere o autor do pacote original e definição da propriedade ProtectionLevel o pacote não permite que o utilizador actual desencriptar segredos no pacote.
  • Uma ligação de SQL Server que utiliza a segurança integrada falha porque o utilizador actual não tem as permissões necessárias.
  • Acesso a ficheiros falha porque o utilizador actual não tem as permissões necessárias para escrever a partilha de ficheiros acede o Gestor de ligação. Por exemplo, este cenário pode ocorrer com fornecedores de registo de texto que não utilizam um início de sessão e uma palavra-passe. Este cenário também pode ocorrer com qualquer tarefa que depende do Gestor de ligação de ficheiro, tal como uma tarefa de sistema do ficheiro SSIS.
  • Uma configuração de pacote SSIS baseadas no registo utiliza as chaves de registo HKEY_CURRENT_USER. As chaves de registo HKEY_CURRENT_USER são específicas do utilizador.
  • Uma tarefa ou um Gestor de ligação requer que a conta de utilizador actual tem as permissões correctas.

Resolução

Para resolver este problema, utilize um dos seguintes métodos. O método mais adequado depende do ambiente e o motivo pelo qual o pacote falhou.

Método 1: Utilizar uma conta de proxy do agente do SQL Server

Crie uma conta de proxy do agente do SQL Server. Esta conta de proxy tem de utilizar uma credencial que lhe permite executar a tarefa como a conta que criou o pacote ou como uma conta que tenha as permissões necessárias do SQL Server Agent.

Este método funciona para desencriptar os segredos e satisfaz os requisitos de chaves por utilizador. No entanto, este método pode ter limitado com êxito uma vez que as chaves de utilizador do pacote SSIS envolvem o utilizador actual e o computador actual. Por conseguinte, se mover o pacote para outro computador, este método poderá ainda falhar, mesmo se o passo de trabalho utiliza a conta de proxy correctas.

Método 2: Definir a propriedade SSIS pacote ProtectionLevel para ServerStorage

Altere a propriedade pacote SSIS ProtectionLevel para ServerStorage. Esta definição armazena o pacote numa base de dados do SQL Server e permite o controlo de acesso através de funções de base de dados do SQL Server.

Método 3: Definir a propriedade SSIS pacote ProtectionLevel para EncryptSensitiveWithPassword

Altere a propriedade pacote SSIS ProtectionLevel para EncryptSensitiveWithPassword. Esta definição utiliza uma palavra-passe para a encriptação. Em seguida, é possível modificar linha de comandos SQL Server Agent tarefa passo para incluir esta palavra-passe.

Método 4: Utilizar SSIS pacote configuração ficheiros

Utilize ficheiros de configuração do pacote SSIS para armazenar informações confidenciais e, em seguida, armazenar estes ficheiros de configuração numa pasta protegida. Em seguida, é possível alterar a propriedade ProtectionLevel para DontSaveSensitive para que o pacote não está encriptado e não tenta guardar segredos para o pacote. Quando executar o pacote SSIS, as informações necessárias são carregadas no ficheiro de configuração. Certifique-se que os ficheiros de configuração estão adequadamente protegidos se contiverem informações sensíveis.

Método 5: Criar um modelo de pacote

Para uma resolução a longo prazo, crie um modelo pacote que utiliza um nível de protecção diferente da predefinição. Este problema não ocorrerá no futuro pacotes.

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

Passos para reproduzir o problema

  1. Inicie sessão como um utilizador que não faz parte do grupo SQLServer2005SQLAgentUser. Por exemplo, pode criar um utilizador local.
  2. Criar um pacote SSIS e, em seguida, adicione uma tarefa ExecuteSQL. Utilizar um Gestor de ligação OLEDB para o ficheiro msdb local utilizando a seguinte cadeia: ? autenticação do Windows ?-SQLSourceType: "Direct entrada" - SQLStatement: "sp_who"
  3. Execute o pacote para garantir que é executado com êxito.
  4. Repare que a propriedade ProtectionLevel é definida como EncryptSensitiveWithPassword.
  5. Crie uma tarefa do agente do SQL Server e um passo de tarefa. Na lista Executar como , clique em Serviço de agente do SQL Server para executar o passo de tarefa.
O texto o histórico de tarefa do SQL Server Agent apresenta informações semelhantes às seguintes:

Executar como utilizador: DOMÍNIO\nomedeutilizador. Falhou a execução do pacote. O passo falhou.

Desencriptar segredos do pacote

A definição predefinida para o pacote SSIS ProtectionLevel propriedade é EncryptSensitiveWithUserKey. Quando o pacote é guardado, SSIS encripta apenas as partes do pacote que contêm propriedades que são marcadas "importantes," tais como cadeias de ligação, palavras-passe e nomes de utilizador. Por conseguinte, quando o pacote é carregado, o utilizador actual tem de satisfazer os requisitos de encriptação para as propriedades sensíveis para ser desencriptado. No entanto, o utilizador actual não é necessário que satisfazer os requisitos de encriptação para carregar o pacote. Quando executa o pacote através de um passo de tarefa do agente do SQL Server, a conta predefinida é a conta serviço de agente do SQL Server. Esta conta predefinida provavelmente é um utilizador diferente do que o autor do pacote. Por conseguinte, o passo de tarefa do agente do SQL Server pode carregar e comece a executar o passo de tarefa, mas o pacote falha porque não é possível efectuar uma ligação. Por exemplo, o pacote não é possível concluir uma ligação de OLE DB ou uma ligação de FTP. O pacote falha porque não é possível desencriptar as credenciais que tem de ter para estabelecer ligação.

importante Tenha em consideração o processo de desenvolvimento e o ambiente para determinar quais as contas que são necessários e utilizadas em cada computador. A definição EncryptSensitiveWithUserKey da propriedade ProtectionLevel é uma definição poderosa. Esta definição não deve ser descontada porque faz com que implementação complicações primeiro. É possível encriptar os pacotes quando inicia sessão conta apropriada. Pode também utilizar o utilitário da linha de comandos dtutil.exe SSIS para alterar os níveis de protecção, utilizando um ficheiro .cmd e o subsistema de comandos de SQL Server Agent. Por exemplo, siga estes passos. Uma vez que pode utilizar o utilitário dtutil.exe em ficheiros batch e ciclos, pode seguir estes passos para vários pacotes ao mesmo tempo.
  1. Modificar o pacote que pretende encriptar utilizando uma palavra-passe.
  2. Utilize o utilitário dtutil.exe através de um passo de tarefa do sistema operativo (cmd "Exec") agente do SQL Server para alterar a propriedade ProtectionLevel para EncryptSensitiveWithUserKey. Este processo envolve desencriptar o pacote utilizando a palavra-passe e, em seguida, re-encrypting o pacote. A chave de utilizador que é utilizada para encriptar o pacote é o passo de tarefa do agente do SQL Server na lista de Executar como .

    Nota Uma vez que a chave de incluir o nome de utilizador e o nome do computador, o efeito de mover os pacotes para outro computador poderão ser limitado.

Certifique-se que pode ter erro informações detalhadas sobre a falha de pacote SSIS

Em vez de depender detalhes limitados o histórico de tarefa do SQL Server Agent, pode utilizar o registo para garantir que tem informações de erro sobre a falha de pacote SSIS SSIS. Também pode executar o pacote utilizando o comando de subsistema exec em vez do comando de subsistema SSIS.

Sobre o registo SSIS

Fornecedores de registo e registo SSIS permitem-lhe capturar detalhes sobre a execução do pacote e falhas. Por predefinição, o pacote não regista informações. Tem de configurar o pacote para registar informações. Quando configura o pacote para registar informações, poderá ver informações detalhadas que é semelhante ao seguinte. Neste caso, saberá que é um problema de permissões:

AoOcorrerErro, nome_domínio, DOMAINNAME\USERNAME, 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, não é possível ligar ao servidor FTP através do "Gestor de ligações de FTP".

AoOcorrerErro, nome_domínio, DOMAINNAME\USERNAME, executar 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, não foi possível adquirir ligação "user01.msdb". Ligação poderá não estar configurada correctamente ou pode não ter as permissões correctas nesta ligação.

Sobre o comando de subsistema exec e informações de saída

Ao utilizar a abordagem de comandos do subsistema exec, adicionar verbosa consola sessão parâmetros de linha de comandos SSIS para chamar o ficheiro executável da linha de comandos Dtexec.exe SSIS. Além disso, utilizar a funcionalidade avançada de tarefa do ficheiro de saída. Também pode utilizar a opção de Incluir saída de passo no histórico de redireccionar as informações de registo para um ficheiro ou para o histórico de tarefa do SQL Server Agent.

Segue-se um exemplo de uma linha de comandos:

dtexec.exe /FILE 
"C:\_work\SSISPackages\ProtectionLevelTest\ProtectionLevelTest\AgentTesting.dtsx" /MAXCONCURRENT " -1 
" /CHECKPOINTING OFF  /REPORTING V  /CONSOLELOG NCOSGXMT


O registo /console devolve detalhes semelhantes à seguinte:

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

Referências

Para obter mais informações sobre um problema semelhante, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
904800  (http://support.microsoft.com/kb/904800/ ) Recebe uma mensagem de erro "Erro ao carregar" quando tenta executar um pacote de SQL Server 2005 Integration Services no SQL Server 2005
Para obter mais informações sobre como utilizar o utilitário dtutil.exe em operações batch, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
906562  (http://support.microsoft.com/kb/906562/ ) Como utilizar o utilitário dtutil (dtutil.exe) para definir o nível de protecção de um lote de pacotes SQL Server Integration Services (SSIS) no SQL Server 2005
Para obter mais informações sobre como criar modelos de pacote, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
908018  (http://support.microsoft.com/kb/908018/ ) Como criar um modelo de pacote no SQL Server Business Intelligence Development Studio


Para mais informações sobre segurança de pacote SSIS e a propriedade ProtectionLevel , consulte o tópico "Security considerações para Integration Services" no SQL Server 2005 Books Online.

Infelizmente, os utilizadores não têm conhecimento que o agente de tarefa passo predefinições colocá-los neste estado. Para mais informações sobre o SQL Server Agent proxies e SSIS, consulte os seguintes tópicos no SQL Server 2005 Books Online:
  • Agendar a execução de pacote no SQL Server Agent
  • Criar proxies do SQL Server Agent

A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2008 Service Pack 1
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2005 Service Pack 3
  • Microsoft SQL Server 2005 Service Pack 2
  • Microsoft SQL Server 2005 Service Pack 1
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
Palavras-chave: 
kbmt kbprb kbsql2005ssis kbsql2005setup kbexpertiseinter kbexpertiseadvanced kbtshoot KB918760 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 918760  (http://support.microsoft.com/kb/918760/en-us/ )