INF: Como executar um pacote DTS como um trabalho agendado

Traduções deste artigo Traduções deste artigo
ID do artigo: 269074
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Um problema que geralmente ocorre com o pacote DTS (Data Transformation Services) é que o pacote DTS é executado livre de erros com o SQL Server Enterprise Manager, mas o pacote DTS falha quando isso está agendado para ser executado conforme um trabalho. Geralmente, isso ocorre devido à uma diferença que existe no contexto de segurança quando o pacote é executado conforme um trabalho versus quando o pacote é executado interativamente.

Este artigo explica os problemas de segurança envolvidos na execução dos pacotes DTS.

Mais Informações

Alguns termos usados nesse artigo incluem:
Recolher esta tabelaExpandir esta tabela
TermosDescrição:
DTSData Transformation Services
Autenticação SQLUm sistema de segurança com base nos logons e senhas do Microsoft SQL Server.
Segurança padrãoConsulte a autenticação SQL.
Consulte a autenticação SQL Server.Consulte a autenticação SQL.
A autenticação do Microsoft Windows NTQuando um usuário conecta-se por meio de uma conta do usuário do Microsoft Windows, o SQL Server verifica se a senha e o nome da conta foram validados quando o usuário fez logon no computador que executa o Microsoft Windows NT, o Microsoft Windows 2000, o Microsoft Windows 95 ou o Microsoft Windows 98.
Segurança integradaConsulte a autenticação do Microsoft Windows NT
A autenticação do Windows NT ou do Microsoft Windows 2000Consulte a autenticação do Microsoft Windows NT
A conta ou o logon do Microsoft Windows NT é igual à conta ou logon do WindowsDa mesma maneira que a conta de logon do Microsoft Windows NT ou que a conta de logon do Microsoft Windows 2000.
Agente SQLServiço do agente SQL Server
SEMSQL Server Enterprise Manager

Em qual local o pacote DTS é executado?

Um problema geralmente relatado sobre os pacotes DTS é a diferença no comportamento quando um pacote é executado com o SQL Enterprise Manager versus quando o pacote DTS é agendado conforme um trabalho. Quando executar o pacote com o DTS Designer no SQL Enterprise Manager (SEM), o pacote é executado no computador no qual está sentado. Caso esteja no servidor (tanto fisicamente quanto por meio do software de acesso remoto), o pacote é executado no servidor. Caso esteja sentado em uma estação de trabalho e tenha registrado o servidor SQL Server no Enterprise Manager, logo o pacote é executado na estação de trabalho. O contexto de segurança do pacote é o da conta do Windows NT usada para fazer logon naquele computador. Quando o pacote é executado conforme um trabalho agendado, o pacote é sempre executado no servidor.

Geralmente, um desenvolvedor cria e testa o pacote DTS interativamente na estação de trabalho por meio do DTS Designer no Enterprise Manager. Após depurar o pacote DTS, o pacote é agendado em seguida conforme um trabalho. Isso altera o local do pacote a partir da estação de trabalho do desenvolvedor para o servidor. Se o pacote estava carregando os dados de texto no SQL Server, o pacote falha a menos que o arquivo texto e o caminho para o arquivo existam no servidor. Se o pacote estava conectado à outro servidor, o pacote falha se o contexto de segurança do trabalho não oferece suporte para a conexão.

A quem compete o trabalho de executar o pacote DTS?

Os pacotes são agendados pela criação de um trabalho gerenciado pelo serviço do agente do SQL. Esse trabalho, assim como qualquer outro trabalho agendado, tem um proprietário. O proprietário pode ser tanto um logon do SQL Server quanto uma conta do Windows NT.

Para determinar o proprietário:
  • Clique duas vezes no trabalho do Enterprise Manager e consulte a caixa de combinação suspensa em Proprietário .

    -ou-

  • Execute o procedimento armazenado no sistema msdb.dbo.sp_help_job .
SQL Server 7.0

O contexto de segurança, no qual executa-se o trabalho, é determinado pelo proprietário do trabalho. Se o trabalho é de propriedade de um logon que não é membro da função de servidor Sysadmin , logo o pacote é executado no contexto da conta SQLAgentCmdExec e tem os direitos e permissões daquela conta.

Para que SQLAgentCmdExec possa executar os trabalhos que se conectam ao SQL Server, a conta SQLAgentCmdExec deve ter as permissões adequadas do Windows/NT e conceder logon de acesso para o SQL Server com as permissões necessárias do banco de dados. A conta SQLAgentCmdExec geralmente não tem direito fora do computador local SQL Server. Portanto, se isso estiver agendado conforme um trabalho de propriedade de um logon que não é membro da função Sysadmin, qualquer pacote que necessite de uma conexão para outro computador falha.

SQL Server 2000

O contexto de segurança, no qual executa-se o trabalho, é determinado pelo proprietário do trabalho. Se o trabalho é de propriedade de um logon que não é membro da função de servidor Sysadmin, logo o pacote é executado no contexto da configuração da conta conforme a conta do SQL Agent Proxy e tem os direitos e permissões daquela conta.

Para que SQL Agent Proxy possa executar os trabalhos que se conectam ao SQL Server, a conta SQL deve ter as permissões adequadas do Windows/NT e conceder logon de acesso para o SQL Server com as permissões necessárias do banco de dados. Para os trabalhos que executam um pacote DTS, a conta do SQL Agent Proxy deve ter lido e gravado as permissões para o diretório temp da conta do SQL Server Agent no qual é executado. Por exemplo,
c:\Documents and Settings\<Conta>\Configurações locais\Temp
Se o trabalho pertence à conta (tanto um logon do SQL Server quanto um logon autenticado do Windows NT) que seja membro da função Sysadmin , o trabalho do SQL Agent é executado no contexto da conta usada para iniciar o serviço do SQL Agent.

Além disso, se o trabalho pertence à conta de domínio do Windows NT e se o pacote armazenado no SQL Server ou no repositório do SQL Server (não conforme um arquivo), inicie o serviço do SQL Server usando uma conta a partir do mesmo domínio ou de uma conta a partir de um domínio confiável. Por exemplo, se o trabalho do SQL Agent pertence a uma conta a partir do domínio norte-americano, logo a conta usada para iniciar o serviço do SQL deve ser tanto de domínio norte-americano quanto de um domínio confiável do domínio norte-americano. Se o SQL Server for iniciado pelo uso de uma conta local, o pacote falha na execução.

O que determina o proprietário?

Pergunta: Quando clicar com o botão direito do mouse no pacote DTS e selecionar para agendar o pacote, como o proprietário é designado?

Resposta: O proprietário do trabalho do agente do SQL depende de como o SQL Server foi registrado no Enterprise Manager. Se o SQL Server for registrado usando uma autenticação do Windows NT, o proprietário do trabalho agendado é a conta usada para iniciar o serviço do SQL Agent. Se o SQL Server for registrado no SEM usando a autenticação SQL Server (por exemplo, o logon SA ), o proprietário do trabalho é o mesmo do logon do SQL Server.

Para alterar a propriedade do pacote:
  1. Clique duas vezes no trabalho do Enterprise Manager.
  2. Clique na guia Geral e em caixa suspensa Proprietário .
Use também o procedimento armazenado no sistema msdb.dbo.sp_update_job para alterar a propriedade do pacote.

Como é lançado o pacote DTS?

Se executar manualmente um pacote pelo uso do utilitário de linha de comando DTSRun.exe , o contexto de segurança é aquele da conta do Windows usado para fazer logon no computador. Se executar o pacote usando o DTSrun.exe por meio do procedimento armazenado estendido xp_cmdshell , o pacote é executado no contexto da conta usada para iniciar o serviço do SQL Server, fornecido a esse usuário que executou xp_cmdshell e é um membro da função Sysadmin . Se o usuário que executou xp_cmdshell não é uma conta da função Sysadmin , logo execute DTSRun.exe no contexto da conta SQLAgentCmdExec .

Se o SQL Server foi iniciado usando a conta Sistema local , o pacote DTS não tem permissões fora do computador que executa o SQL Server.

Se o serviço do SQL Server for iniciado em uma conta do Windows NT, o pacote tem os mesmos direitos e permissões conforme essa conta do Windows NT. Se essa conta do Windows NT for uma conta do computador local (como que oposta à uma conta do domínio), o pacote não tem quaisquer direitos fora do computador. Se a conta do Windows NT é uma conta do domínio, o pacote talvez possa acessar os recursos em muitos computadores diferentes nesse domínio.

Como são realizadas as conexões autenticadas do Windows NT?

Algumas vezes um pacote DTS contém um objeto que transforma uma conexão em uma fonte de dados usando a autenticação do Windows NT. O contexto de segurança usado para essa conexão é o mesmo conforme o contexto do pacote que é executado. Se o pacote for executado a partir do Prompt de comando usando DTSRun.exe, as credenciais da conta do Windows NT conectada no momento são usadas. Se o pacote é executado conforme um trabalho do SQL Server Agent, logo a conexão de segurança integrada é realizada pelo uso da conta que foi usada para iniciar o SQL Agent (presumindo-se que o proprietário do pacote seja um membro da função Sysadmin ).

Problemas Comuns

Aqui estão alguns outros problemas comuns que podem ser encontrados quando executar os pacotes DTS conforme os trabalhos agendados no SQL Agent:

Unidades mapeadas

Se o pacote confia no local físico de um arquivo projetado por uma letra de unidade mapeada, o pacote pode falhar quando isso for executado conforme um trabalho do SQL Agent, independentemente de quem possui o pacote. O SQL Agent é um serviço do Windows NT e os serviços do Windows NT não podem consultar as letras de unidades mapeadas. O mapeamento faz parte do perfil do usuário que é carregado quando o usuário faz logon em uma sessão do Windows NT. Os serviços não funcionam com os perfis do usuário. Use um caminho UNC em vez de uma letra da unidade mapeada. Para obter informações adicionais sobre o porquê de um serviço não poder usar uma unidade de letra mapeada, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento da Microsoft:
180362 INFORMAÇÕES: Serviços e unidades redirecionadas

Caminho relativo

Um caminho relativo (ou letra da unidade) é específico para o local atual do pacote (como C:\). Se um pacote for projetado em uma estação de trabalho e logo for agendado, altera-se o local a partir do qual o pacote é executado. Os caminhos das letras das unidades agora se referem à um local físico diferente daquele do servidor. A menos que os arquivos mencionados também sejam movidos para o servidor, a execução do pacote falha.

Componentes COM nos scripts ActiveX

Se os componentes COM ( por exemplo, chama para o Microsoft ActiveX Data Objects (ADO), para o Remote Data Objects (RDO) ou para os objetos do Decision Support Object (DSO)) forem chamados em um script ActiveX, os componentes chamados devem existir no computador a partir do qual o pacote DTS é executado. Se executar o pacote a partir do DTS Designer no SEM ou DTSRun.exe , os componentes devem existir no computador no qual está sentado. Se o pacote for agendado para ser executado pelo SQL Agent, os componentes chamados devem ser carregados no computador que hospeda o SQL Server.

Segurança do pacote

Os pacotes DTS podem ter as senhas do proprietário e as senhas do usuário. Essas senhas afetam quem possa editar e executar os pacotes. Nenhuma delas afetam o contexto de segurança no qual o pacote é executado.

Permissões SQLAgentCmdExec

Caso o trabalho seja executado no contexto da conta SQLAgentCmdExec e a conta SQLAgentCmdExec não tiver direitos de logon para o SQL Server, o trabalho pode falhar com a mensagem de erro a seguir:
DTSRun: Carregando....... DTSRun: Executando..... DTSRun OnStart: DTSStep_DTSExecuteSQLTask_1 DTSRun OnError: DTSStep_DTSExecuteSQLTask_1, Error = -2147217843 (80040E4D) Seqüência de erro: Falha do logon para o usuário NT_name\SQLAgentCmdExec. Origem do erro: Provedor do Microsoft OLE DB para o arquivo de Ajuda do SQL Server: Contexto de ajuda: 0 Error Detail Records: Erro: -2147217843 (80040E4D); Provedor do Erro: 18456 (4818) Seqüência de erro: Falha do logon para o usuário NT_name\SQLAgentCmdExec. Origem do erro: O provedor Microsoft OLE DB para o arquivo de ajuda do SQL Server: Contexto de ajuda: 0 DTSRun OnFinish: DTSStep_DTSExecuteSQLTask_1 DTSRun: Execução do pacote concluída. Código de saída do processo 1. Falha da etapa.
Conceda o logon da conta adequada SQLAgentCmdExec e os direitos das permissões do banco de dados para o SQL Server.

Propriedades

ID do artigo: 269074 - Última revisão: terça-feira, 15 de fevereiro de 2011 - Revisão: 3.5
Palavras-chave: 
kbsqlmanagementtools kbproductlink kbinfo KB269074

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com