2009-05-08 20 views
9

Estoy tratando de obtener datos de un servidor SQL remoto. Puedo acceder al servidor remoto usando autenticación SQL; No he tenido suerte usando las mismas credenciales con sp_addlinkedserver.Tiene problemas para agregar un servidor SQL vinculado

Estoy intentando algo como esto:

Exec sp_dropserver 'Remote', 'droplogins' 
go 

EXEC sp_addlinkedserver 
    @server='Remote', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='0.0.0.0' 

EXEC sp_addlinkedsrvlogin 
    @useself='FALSE', 
    @rmtsrvname='Remote', 
    @rmtuser='User', 
    @rmtpassword='Secret' 

Select Top 10 * from Remote.DatabaseName.dbo.TableName 

Esto es lo que me sale:

 

OLE DB provider "SQLNCLI" for linked server "Remote" returned message 
"Login timeout expired". 

OLE DB provider "SQLNCLI" for linked server "Remote" 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 53, Level 16, State 1, Line 0 
Named Pipes Provider: Could not open a connection to SQL Server [53]. 

Una vez más, puedo acceder al servidor directamente (en SQL Server Management Studio) usando estas credenciales exactas, así que no es un problema con mi red o credenciales.

La mayoría de los ejemplos que he visto en línea parecen involucrar cuentas de dominio de Windows, a diferencia de los inicios de sesión de seguridad de SQL. ¿Esto no funciona con la autenticación SQL?

Respuesta

6

Funciona con autenticación sql. De hecho, es más fácil, ya que no tiene que configurar Kerberos si usa la autenticación SQL.

Una cosa es confusa acerca de sus mensajes de error, su dirección es una dirección IP: 123.45.678.90

su mensaje de error está hablando de canalizaciones con nombre. ¿Podría ser esto una pista?

No es necesario que haga referencia al servidor en TSQL por su dirección IP. Si agrega un alias on the local server, apuntando al servidor remoto, puede dar un nombre más sensato. Referirse a él por una dirección IP es obviamente insatisfactorio.

+0

Esa es una idea interesante. Obtengo el mismo resultado si ingreso una dirección IP falsa, o "foofoofoo" en el parámetro @datasrc. –

+0

Gracias, esto me llevó a la solución correcta. –

+1

Respóndeme entonces mi buen hombre, anhelo un puntaje alto = D –

1

Si está fallando en Canalizaciones con nombre al especificar una dirección IP, intente prefijar la dirección IP con "tcp:" y vea si ayuda a establecerla en el camino correcto.

+0

Gracias - Intenté esto y no sirvió de nada. –

+1

Para aquellos que buscan conectarse por nombre de dominio swap @ datasrc = 'tcp: 0.0.0.0' con @datasrc = 'midominio.com', no SERVER = como en muchas otras publicaciones. –

2

lo descubrió, gracias a una línea de instrucciones del asistente de interfaz gráfica de usuario de SMS para la adición de unos servidores vinculados: "If SQL Server is selected, then the Linked Server name is also the network name of the server."

me pareció que el nombre del servidor vinculado era sólo un alias arbitraria.

Esto funciona a las mil maravillas, es una pena que tenga que escribir la IP (entre paréntesis) cada vez que quiero usar este servidor vinculado, pero ahí lo tiene.

Exec sp_dropserver '0.0.0.0', 'droplogins' 
go 

EXEC sp_addlinkedserver 
    @server='0.0.0.0', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='0.0.0.0' 

EXEC sp_addlinkedsrvlogin 
    @useself='FALSE', 
    @rmtsrvname='0.0.0.0', 
    @rmtuser='user', 
    @rmtpassword='secret' 
go 

Select Top 10 * from [0.0.0.0].DatabaseName.dbo.TableName 
+0

guau, eso apesta. ¿Estás seguro de que no tienes un problema de resolución de nombres? –

+0

No estoy seguro de lo que quiere decir: no hay un nombre de dominio asociado con el servidor de bases de datos, solo una dirección de IP. –

+0

Sí, tengo este mismo problema ahora. Intenté solucionarlo especificando SQLOLE (o lo que sea) como el proveedor y dándole una cadena de conexión, en cuyo caso @server es en realidad un nombre lógico arbitrario ... pero esto no se conectaría del todo en la máquina de producción (I olvidé por qué). Así que volví a este método y abstraí la ubicación física utilizando una vista en las tablas de interés, que hasta ahora funciona. – harpo

1

sp_configure 'Ad Hoc' consultas distribuidas, 1

próxima

reconfigure with override

han comprobado la superficie de SQL Configuracion -> Databaseengine -> Remoteconnections -> Conexiones loacales y remotas -> shouild use la opción TCP/IP y canalizaciones con nombre marcadas (si no elige esa opción y reinicie)

esto tiene que resolver el problema Proveedor OLE DB "SQLNCLI" para el servidor vinculado "Remoto" devolvió el mensaje "Se ha producido un error al establecer una conexión con el servidor. Al conectarse a SQL Server 2005, esta falla puede ser causada por el hecho de que bajo la configuración predeterminada SQL Server no permite conexiones remotas . ".

9

Para resolver el problema anterior I modificado la definición de servidor vinculado para especificar TCP específicamente:

EXEC sp_addlinkedserver 
    @server='TEST_LINK', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='tcp:0.0.0.0' 

EXEC sp_addlinkedsrvlogin 
    @useself='FALSE', 
    @rmtsrvname='TEST_LINK', 
    @rmtuser='user', 
    @rmtpassword='secret' 

Esto funcionó para mí. Este método también me permitió especificar un puerto no estándar para el servidor remoto:

EXEC sp_addlinkedserver 
    @server='TEST_LINK', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='tcp:0.0.0.0,1111' 

espero que esto ayude a

0

A veces, los protocolos se han habilitado y la configuración del área de superficie permite conexiones remotas, pero el SQL El servicio del navegador del servidor no se ha reiniciado desde que se configuró la configuración. Esto significa que la configuración no está activa.

Intente reiniciar el navegador de SQL Server como un paso de solución de problemas si todos sus ajustes de configuración parecen ser correctos.

Mike

Cuestiones relacionadas