Pelo meu entendimento deste problema, é um problema "HOP".
ou seja, você está tentando usar o servidor A para retransmitir seus detalhes de login (com SSPI) para o servidor B.
No SQL Server 2005, eles adicionaram um monte de problemas de segurança que tornam isso mais difícil do que deveria ser. As palavras "Autenticação Kerberos" se tornarão o centro da vida da maioria dos administradores de sistemas / DBA. É efetivamente usado para autenticação de passagem.
Aqui estão os conceitos básicos do que você precisa. 1) Os servidores (A e B) precisam ser configurados no Active Directory (AD) com a delegação do Kerberos ativada. (isso é definido através do painel de administração do Active Directory)
2) A conta de serviço em que os servidores SQL são executados também precisa ter a delegação ativada (isso também é definido no painel de administração do diretório ativo). - se eles não estiverem sendo executados em uma conta de serviço, você precisará criar uma.
3) Os servidores precisam ter os SPNs definidos para a instância e o HOST e o nome da máquina. (Usando uma ferramenta chamada SetSPN nas ferramentas de suporte do Windows)
Ferramentas de suporte (SetSPN está neste conjunto)
http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=pt
(Visão geral de como adicionar um SPN)
http://technet.microsoft.com/en-us/library/bb735885.aspx
4) Pode ser necessário definir seu banco de dados como "confiável"
ALTER DATABASE SET confiável em
5) Após concluir tudo isso, reinicie suas instâncias.
6) Em seguida, tente criar seu servidor vinculado novamente.
Finalmente, você pode testar sua conexão com o SQL Server. Isso deve funcionar bem se você tiver tudo configurado corretamente.
SELECT *
FROM OPENDATASOURCE('SQLNCLI',
'Data Source=ServerB;Integrated Security=SSPI;'
).MASTER.dbo.syscolumns
Isso informará seu tipo de autenticação de conexão.
select auth_scheme from sys.dm_exec_connections where session_id=@@SPID
Você deseja obter 'KERBEROS' aqui e não 'NTLM'.
É uma ladeira escorregadia, KERBEROS e delegação de passagem, permaneçam nela e você acabará descobrindo.
Referências
Kerberos
http://blogs.msdn.com/sql_protocols/archive/2005/10/12/479871.aspx
http://blogs.msdn.com/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx
http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/the-biggest-mistake-serviceprincipalname-s.aspx
Outras manifestações do problema
http://www.sqlservercentral.com/Forums/Topic460425-359-1.aspx
http://msdn2.microsoft.com/en-us/library/aa905162(sql.80).aspx
http://msdn2.microsoft.com/en-us/library/ms189580.aspx
Espero que tudo isso ajude.
Você também pode usar o SQL Server Management Studio (SSMS) para gerenciar \ criar servidores vinculados também se estiver mais à vontade com a GUI. Para fazer isso:
Observe que isso pressupõe que os usuários que possuem logons no servidor A também tenham logons no servidor B.
fonte
Estou ficando louco com o mesmo problema! Lembro-me de fazer isso com 2000 sempre foi fácil. Estive em todo o Google e não consigo fazer isso funcionar. Exatamente a mesma configuração, ambos os servidores em execução em uma conta de domínio, autenticação do Windows.
Estou tentando usar pipes nomeados em vez de TCP e, pelo menos, recebo um erro diferente:
Isso pode ter algo a ver com a ativação de pipes de nomes, mas eu posso conectar via sqlcmd do servidor A ao servidor B desta maneira:
Se eu não usei pipes nomeados, e faça:
Eu entendi isso:
[Editar] Comecei uma discussão no Sql Server Central sobre isso. Basicamente, você precisa fazer algumas configurações complicadas relacionadas à delegação Kerberos para que isso funcione.
http://www.sqlservercentral.com/Forums/Topic574262-146-1.aspx
Decidi criar apenas uma conta de logon Sql única e limitada para lidar com as consultas vinculadas. Eu odeio recorrer a isso, mas parece mais seguro do que as alterações que você precisa fazer para fazê-lo funcionar com o auth do Windows.
fonte
Se você fizer uma pesquisa em sp_addlinkedserver e sp_linkedservers, obterá alguns exemplos. É bem simples de configurar.
fonte
Além disso, se você possui o SQL Manager, pode adicionar à sua GUI.
Basicamente, você precisa vincular os dois servidores pelos SPs mencionados por Tim ou via GUI e, em seguida, definir as regras de acesso (o que nem é necessário se você usar a autenticação do Windows nos dois servidores).
fonte
Eu sei que isso deve ser fácil, mas não está funcionando para mim - estou tendo problemas de segurança aqui. Então, eu gostaria que alguém explicasse as etapas para mim.
Eu fiz isso no passado no SQL 2000 sem problemas.
fonte
Você pode vinculá-los, mas não pode executar uma consulta devido a contas incorretas?
O usuário do Windows que você tenta usar tem direitos para ler dados nos dois servidores?
Uma vez eu também tive um problema porque a propriedade "acesso a dados" foi configurada como falsa por algum motivo desconhecido.
Experimente também o que acontece se você definir explicitamente um usuário para outro usuário para o link.
(Tudo isso pode ser feito no SQL Manager.)
fonte
Tim postou as etapas exatas que eu assumi serem as corretas. Etapa 5 é a página de segurança. Eu seleciono "Ser criado usando o contexto de segurança atual do login".
Quando clico em ok, recebo o seguinte erro. Não sei por que ele está tentando usar 'NT Authority \ Anonymous login'. Estou conectado à minha estação de trabalho com minha conta de domínio, que tem todos os direitos nos dois servidores.
fonte
Tente fazer isso enquanto estiver conectado localmente no servidor, se você fizer isso de uma máquina remota, poderá não estar enviando as credenciais apropriadas.
fonte