O trabalho do agente SQL que executa uma consulta distribuída pode falhar com mensagens de erro 65535, 782 ou 7437

Sintomas

Um trabalho do agente SQL que executa uma consulta distribuída (servidor vinculado) pode falhar com uma das mensagens de erro semelhantes às seguintes, quando o proprietário do trabalho não é membro da função de servidor sysadmin :

O provedor OLE DB "> nome do provedor" <para o servidor vinculado "<nome do LinkedServer>" mensagem retornada "tempo limite do logon expirado". O provedor OLE DB "> nome do provedor" <para o servidor vinculado "" <nome do LinkedServer> "mensagem retornada" ocorreu um erro ao estabelecer uma conexão com o servidor. Durante a conexão ao SQL Server 2005, essa falha pode ser causada pelo fato de que, sob as configurações padrão, o SQL Server não permite conexões remotas. ". MSG 65535, nível 16, estado 1, interfaces de rede 0SQL: erro ao localizar o servidor/instância especificado [xFFFFFFFF].

Ou

MSG 782, nível 16, estado 1, provedor de 0SSL de linha: nenhuma credencial está disponível noprovedor OLE DB do pacote de segurança "<nome do provedor ole">"para o servidor vinculado" <nome do LinkedServer> "mensagem devolvida" o cliente não consegue estabelecer conexão ".

Por exemplo, no ambiente do SQL Server 2008 as mensagens de erro podem ser semelhantes às seguintes:

O provedor OLE DB "SQLNCLI" para o servidor vinculado "<LinkedServer nome>" mensagem retornada "tempo limite de logon expirado". O provedor OLE DB "SQLNCLI" para o servidor vinculado "" <nome LinkedServer> "mensagem retornada" ocorreu um erro ao estabelecer uma conexão com o servidor. Durante a conexão ao SQL Server 2005, essa falha pode ser causada pelo fato de que, sob as configurações padrão, o SQL Server não permite conexões remotas. ". MSG 65535, nível 16, estado 1, interfaces de rede 0SQL: erro ao localizar o servidor/instância especificado [xFFFFFFFF].

Ou

MSG 782, nível 16, estado 1, provedor de 0SSL de linha: nenhuma credencial está disponível noprovedor OLE DB do pacote de segurança "sqlncli10" para o servidor vinculado "<LinkedServer nome>" mensagem devolvida "o cliente não consegue estabelecer conexão".

Ou

MSG 7437, nível 16, estado 1, os servidores de linha 3Linked não podem ser usados em representação sem um mapeamento para o logon representado.

Você também pode ver o mesmo comportamento ao usar OPENQUERY ou ao executar uma consulta distribuída usando representação por meio da instrução "execute as login" T-SQL.

Causa

A etapa do trabalho Transact-SQL é executada como proprietário da etapa do trabalho se o proprietário da etapa do trabalho não for membro da função de servidor fixa sysadmin . O agente SQL usa "execute as login" para executar a etapa do trabalho sob o contexto do proprietário da etapa do trabalho. Não é possível usar instrução EXECUTE AS em limites do servidor. Este é o comportamento padrão. Para obter informações adicionais, consulte os tópicos a seguir nos manuais online do SQL Server:

Observação: a mesma causa se aplica ao cenário em que você tenta manualmente alterar o contexto de execução de uma consulta distribuída no Management Studio usando a instrução Execute as .

Solução alternativa

Importante: a solução alternativa a seguir exige que você defina um logon de servidor local explícito para mapeamentos de logon do servidor remoto usando a página segurança em Propriedades do objeto do servidor vinculado. Como a coluna de usuário remoto deve ser um logon de autenticação do SQL Server no servidor remoto, o modo de autenticação do servidor remoto deve já estar definido para o modo misto ou deve ser alterado para modo misto antes de usar a solução alternativa descrita abaixo. Se uma etapa do trabalho T-SQL é propriedade de um usuário que não faz parte da função de servidor sysadmin e se a etapa contiver uma consulta distribuída, siga estas etapas para garantir que os trabalhos ou consultas não falhem:

  1. Crie um mapeamento para cada um dos proprietários de etapa de trabalho no servidor local para um logon novo ou existente no servidor remoto.

  2. Verifique se o logon tem privilégios suficientes para executar vários módulos no servidor remoto que são acessados na consulta distribuída.

Para obter informações adicionais, consulte o tópico a seguir nos manuais online do SQL Server:

Informações adicionais

Às vezes, você pode notar que as consultas discutidas em qualquer um dos cenários na seção sintomas podem ser executadas com êxito. Isso geralmente ocorre quando o usuário representado anteriormente conectado ao sistema remoto e o sistema ainda mantém aberto uma conexão estabelecida pelo uso remoto. Você não deve esperar que a consulta funcione o tempo todo.Etapas para reproduzir o comportamento

  1. Na sua instância SQL, crie um servidor vinculado para outra instância SQL usando o SQL Server Management Studio (SSMS) ou o seguinte script.

    EXEC master.dbo.sp_addlinkedserver @server = <server name>, @srvproduct=N'SQL Server'/* For security reasons the linked server remote logins password is changed with ######## */EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=<servername> ,@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
  2. Execute a seguinte consulta no SSMS usando um logon que seja membro da função de servidor sysadmin e verifique se ela funciona bem.

    select * from <servername>.master.sys.sysobjects
  3. Agora, altere o contexto da consulta para uma conta não sysadmin e execute a mesma consulta.

    execute as login=’Domain\Login1’goselect suser_sname()goselect * from <servername>.master.sys.sysobjectsgo

    Esta etapa falha com o erro mencionado na seção sintomas do artigo.

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Estas informações foram úteis?

Obrigado por seus comentários!

Agradecemos pelos seus comentários! Parece que pode ser útil conectar você a um de nossos agentes de suporte do Office.

×