Configuración de servidor vinculado de SQL Server a servidor SQL

25

Explique qué se requiere para configurar un servidor vinculado de SQL Server.

El servidor A es solo para inicios de sesión de Windows de SQL 2005 El servidor B es el mismo (solo para inicios de sesión de Windows de SQL 2005)

El servidor A ejecuta Windows XP El servidor B ejecuta Windows Server 2003

Ambos servicios de SQL Server se ejecutan bajo la misma cuenta de dominio. He iniciado sesión en mi estación de trabajo con una cuenta de dominio que tiene derechos administrativos en ambos servidores SQL.

Tenga en cuenta que ambos son SQL Server 2005 SP2: me han señalado revisiones antiguas, pero ya están aplicadas.

El problema que tengo es este error: "Error de inicio de sesión para el usuario 'NT AUTHORITY \ ANONYMOUS LOGON'. (Microsoft SQL Server, Error: 18456)"

ScottStonehouse
fuente

Respuestas:

18

Según tengo entendido este problema, es un problema de "HOP".

es decir, está intentando usar el servidor A para transmitir sus detalles de inicio de sesión (con SSPI) al servidor B.

En SQL Server 2005, han agregado una gran cantidad de problemas de seguridad que hacen que esto sea más difícil de lo que debería ser. Las palabras "Autenticación Kerberos" se convertirán en la base de la mayoría de las vidas de sys-admins / DBA. Se utiliza efectivamente para la autenticación de paso.

Aquí están los conceptos básicos de lo que necesita. 1) Los servidores (A y B) deben configurarse en Active Directory (AD) con la delegación para Kerberos habilitada. (esto se configura a través del panel de administración del directorio activo)

2) La cuenta de servicio con la que se ejecutan sus servidores SQL también debe tener habilitada la delegación (esto también se configura a través del panel de administración del directorio activo). - si no se ejecutan con una cuenta de servicio, debe crear una.

3) Los servidores deben tener SPN definidos para la instancia y el HOST y el nombre de la máquina. (Usando una herramienta llamada SetSPN en las herramientas de soporte de Windows)

Herramientas de soporte (SetSPN está en este conjunto) http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=en

(Descripción general de cómo agregar un SPN) http://technet.microsoft.com/en-us/library/bb735885.aspx

4) Es posible que deba configurar su DB en "confiable"

ALTER DATABASE SET de confianza en

5) Después de hacer todo esto, reinicie sus instancias.

6) Luego intente crear su servidor vinculado nuevamente.

Finalmente puede probar su conexión a SQL Server. Esto debería funcionar bien si lo tiene todo configurado correctamente.

SELECT *
FROM OPENDATASOURCE('SQLNCLI',
    'Data Source=ServerB;Integrated Security=SSPI;'
    ).MASTER.dbo.syscolumns

Esto le dirá su tipo de autenticación de conexión.

select auth_scheme from sys.dm_exec_connections where session_id=@@SPID

Desea obtener 'KERBEROS' aquí y no 'NTLM'.

Es una pendiente resbaladiza, KERBEROS y delegación de paso, quédese con ella y eventualmente lo resolverá.

Referencias 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

Otras manifestaciones del 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 todo esto ayude.

evilhomer
fuente
¡Gran respuesta! Esto definitivamente resume una carga de información que no está organizada útilmente en otros lugares.
ConstantineK
3

También puede usar SQL Server Management Studio (SSMS) para administrar \ crear servidores vinculados también si se siente más cómodo con la GUI. Para hacerlo:

  1. Inicie SSMS y conéctese a una de las instancias de SQL Server que desea vincular
  2. Expanda "Objetos del servidor" en el Explorador de objetos
  3. Haga clic derecho en "Servidores vinculados" y elija "Nuevo servidor vinculado"
  4. En el cuadro de diálogo "Nuevo servidor vinculado", seleccione "SQL Server" como Tipo de servidor e ingrese la instancia de SQL Server a la que desea vincular.
  5. En la página "Seguridad", seleccione cómo los usuarios se autenticarán desde el servidor actual al servidor vinculado. Usted mencionó que ambos servidores están configurados para usar los inicios de sesión de Windows. Si este es el caso, en la sección etiquetada "Para un inicio de sesión no definido en la lista anterior, las conexiones:" Probablemente elegiría la opción etiquetada "Realizar usando el contexto de seguridad actual del inicio de sesión" .

Tenga en cuenta que esto supone que los usuarios que tienen inicios de sesión en el servidor A también tienen inicios de sesión en el servidor B.

Tim Lentine
fuente
1

Me estoy volviendo loco con el mismo problema! Recuerdo que hacer esto con 2000 siempre fue fácil. He estado en todo google y no puedo hacer que esto funcione. Exactamente la misma configuración, ambos servidores se ejecutan en una cuenta de dominio, autenticación de Windows.

Estoy tratando de usar tuberías con nombre en lugar de TCP y al menos obtengo un error 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".

*/

Esto podría tener algo que ver con habilitar las canalizaciones de nombres, pero puedo conectarme a través de sqlcmd del servidor A al servidor B de esta manera:

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

Si no utilizo tuberías con nombre, y solo lo hago:

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

Entiendo esto:

Login failed for user NT AUTHORITY\ANONYMOUS LOGIN

[Editar] Comencé una discusión sobre Sql Server Central sobre esto. Básicamente, debe hacer una configuración complicada relacionada con la delegación de Kerberos para que esto funcione.

http://www.sqlservercentral.com/Forums/Topic574262-146-1.aspx

Decidí crear una única cuenta de inicio de sesión SQL limitada para manejar las consultas vinculadas. Odio recurrir a eso, pero parece más seguro que los cambios que tiene que hacer para que funcione con Windows Auth.

Eric Z Beard
fuente
Vea a continuación la complicada configuración de Kerberos. ¡Esto me ha matado por mucho, mucho tiempo!
evilhomer
0

Si realiza una búsqueda en sp_addlinkedserver y sp_linkedservers, obtendrá algunos ejemplos. Es bastante sencillo de configurar.

Tim Cochran
fuente
0

Además, si tiene SQL Manager, puede agregarlo con su GUI.

Básicamente, debe vincular los dos servidores mediante los SP mencionados por Tim o mediante la GUI y luego establecer las reglas de acceso (que ni siquiera es necesario si utiliza la autenticación de Windows en ambos servidores).


fuente
0

Sé que se supone que esto es fácil, pero no me funciona en absoluto: tengo problemas de seguridad aquí. Así que me gustaría que alguien me explicara los pasos.

He hecho esto en el pasado en SQL 2000 sin problemas.

ScottStonehouse
fuente
0

¿Entonces puede vincularlos, pero no puede ejecutar una consulta debido a cuentas incorrectas?

¿El usuario de Windows que intenta usar tiene derechos para leer datos en ambos servidores?

Una vez también tuve un problema porque la propiedad de "acceso a datos" se estableció en falso por algún motivo desconocido.

Pruebe también lo que sucede si establece explícitamente un usuario en otro para el enlace.

(Todo esto se puede hacer en el Administrador de SQL).


fuente
0

Tim ha publicado los pasos exactos que supuse que eran los correctos. El paso 5 es la página de seguridad. Selecciono "Realizar usando el contexto de seguridad actual del inicio de sesión".

Cuando hago clic en Aceptar, aparece el siguiente error. No sé por qué está tratando de usar 'NT Authority \ Anonymous login'. He iniciado sesión en mi estación de trabajo con mi cuenta de dominio que tiene todos los derechos en ambos servidores.

TÍTULO: Microsoft SQL Server Management Studio

"El servidor vinculado se creó pero falló una prueba de conexión. ¿Desea mantener el servidor vinculado?"

------------------------------ INFORMACIÓN ADICIONAL:

Se produjo una excepción al ejecutar una instrucción o lote de Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)


Error de inicio de sesión para el usuario 'NT AUTHORITY \ ANONYMOUS LOGON'. (Microsoft SQL Server, error: 18456)

Para obtener ayuda, haga clic en: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.3068&EvtSrc=MSSQLServer&EvtID=18456&LinkId=20476

ScottStonehouse
fuente
0

Intente hacer esto mientras está conectado localmente al servidor; si lo hace desde una máquina remota, es posible que no envíe las credenciales adecuadas.


fuente