Configuração do SQL Server para o servidor sql vinculado ao servidor

25

Por favor, explique o que é necessário para configurar um servidor vinculado ao SQL Server.

O servidor A é apenas o logon do Windows do SQL 2005 O servidor B é o mesmo (somente o logon do Windows do SQL 2005)

Servidor A executa o Windows XP Server B executa o Windows Server 2003

Os dois serviços do SQL Server estão em execução na mesma conta de domínio. Estou conectado à minha estação de trabalho com uma conta de domínio que possui direitos administrativos nos dois servidores SQL.

Observe que esses são os dois SQL Server 2005 SP2 - tive hotfixes antigos apontados para mim, mas eles já foram aplicados.

O problema que estou tendo é este erro: "Falha no logon para o usuário 'NT AUTHORITY \ ANONYMOUS LOGON'. (Microsoft SQL Server, Erro: 18456)"

ScottStonehouse
fonte

Respostas:

18

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.

evilhomer
fonte
Ótima resposta! Definitivamente, isso resume uma carga de informações que não são organizadas de maneira útil em outros lugares.
ConstantineK
3

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:

  1. Inicie o SSMS e conecte-se a uma das instâncias do SQL Server que você deseja vincular
  2. Expanda "Objetos do servidor" no Pesquisador de objetos
  3. Clique com o botão direito do mouse em "Servidores vinculados" e escolha "Novo servidor vinculado"
  4. Na caixa de diálogo "Novo servidor vinculado", selecione "SQL Server" como o Tipo de servidor e insira a instância do SQL Server à qual você deseja vincular.
  5. Na página "Segurança", selecione como os usuários se autenticarão do servidor atual para o servidor vinculado. Você mencionou que os dois servidores estão configurados para usar logins do Windows. Se for esse o caso, na seção "Para um logon não definido na lista acima, as conexões:" Eu provavelmente escolheria a opção "Seja feita usando o contexto de segurança atual do logon" .

Observe que isso pressupõe que os usuários que possuem logons no servidor A também tenham logons no servidor B.

Tim Lentine
fonte
1

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:

EXEC sp_addlinkedserver 
    @server='statler', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='np:statler', 
    @provstr='Integrated Security=SSPI'

-- Then I try this:
select net_transport, auth_scheme 
from statler.master.sys.dm_exec_connections 
where session_id=@@spid

/*

Getting closer, but still fails:

OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "Login timeout expired".
OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "An error has occurred while establishing a connection to the server. 
    When connecting to SQL Server 2005, this failure may be caused by the 
    fact that under the default settings SQL Server does not allow 
    remote connections.".
Msg 5, Level 16, State 1, Line 0
Named Pipes Provider: Could not open a connection to SQL Server [5]. 
OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "Invalid connection string attribute".

*/

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:

WALDORF:>  Sqlcmd.exe /E /Snp:statler

Se eu não usei pipes nomeados, e faça:

New Linked Server
Server Type: SqlServer
Security: be made using the current login's security context

Eu entendi isso:

Login failed for user NT AUTHORITY\ANONYMOUS LOGIN

[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.

Eric Z Beard
fonte
Veja abaixo a configuração complicada do Kerberos. Esse material me matou por muito, muito tempo!
evilhomer 7/10/08
0

Se você fizer uma pesquisa em sp_addlinkedserver e sp_linkedservers, obterá alguns exemplos. É bem simples de configurar.

Tim Cochran
fonte
0

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
0

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.

ScottStonehouse
fonte
0

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
0

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.

TITLE: Microsoft SQL Server Management Studio

"O servidor vinculado foi criado, mas falhou em um teste de conexão. Deseja manter o servidor vinculado?"

------------------------------ INFORMAÇÃO ADICIONAL:

Ocorreu uma exceção ao executar uma instrução ou lote Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)


Falha no logon para o usuário 'NT AUTHORITY \ ANONYMOUS LOGON'. (Microsoft SQL Server, erro: 18456)

Para obter ajuda, clique em: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.3068&EvtSrc=MSSQLServer&EvtID=18456&LinkId=20476

ScottStonehouse
fonte
0

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