¿Cómo hago que funcione esta conexión ODBC de SQL Server?

30

Nota: Obviamente he cambiado los nombres de los servidores y las direcciones IP a ficticios.

Esto es lo que está pasando. Tengo un servidor, al que llamo MYSERVER, que ejecuta Microsoft SQL Server Express 2005. Justo en este servidor, tengo una conexión ODBC configurada apuntando a sí misma, y ​​eso ya funciona perfectamente. Me conecto usando la autenticación de SQL Server (no la autenticación de Windows), y está configurado de esta manera:

Imagen de buena conexión ODBC

Como dije, ese funciona. Pero a continuación, tengo otra computadora que está en un dominio totalmente diferente / no en la intranet, que necesita acceder a este mismo SQL Server alojado en MYSERVER. Debido a que está en un dominio diferente, no reconoce el nombre "MYSERVER"; Tengo que señalarlo a la dirección IP de MYSERVER, que diremos es 123.456.789.012. Pero la conexión ODBC no parece funcionar allí. Intenté configurarlo así:

Imagen de mala conexión ODBC

Esto no funciona Cuando introduzco el nombre de usuario y la contraseña y presiono Siguiente, se detiene durante unos 10 a 20 segundos, y finalmente regresa con el siguiente error:

Connection failed:
SQLState: '01000'
SQL Server Error: 1326
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).
Connection failed:
SQLState: '08001'
SQL Server Error: 17
[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.

Si intento lo mismo, pero cambio el "servidor" de 123.456.789.012\SQLEXPRESSsimplemente viejo 123.456.789.012, obtengo un error diferente:

Connection failed:
SQLState: '01000'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Invalid Instance()).
Connection failed:
SQLState: '08001'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]Invalid connection.

Ahora sé lo que estás pensando. Quizás estés pensando, "duh, probablemente no abriste el firewall para el puerto 1433, tonto". Excepto que lo hice, y verifiqué esto, ya que puedo ejecutar con éxito :

telnet 123.456.789.012 1433

... desde la línea de comandos todo lo que quiero. Así que no estoy seguro de qué hacer. Sé que el SQL Server existe, funciona, y una conexión ODBC se puede configurar correctamente; Simplemente no estoy seguro de qué es lo que tengo mal en mi configuración de conexión que arroja estos errores. Según el último error que enumeré, parece que se puede conectar al servidor, pero simplemente no puede encontrar la instancia (ya que no especifiqué uno esa vez). Entonces, ¿eso significa que solo necesito usar una sintaxis diferente para especificar la IP junto con un nombre de instancia? ¿Qué debo hacer? Gracias por adelantado.

Soapergem
fuente

Respuestas:

18

Las canalizaciones con nombre y los protocolos TCIP para SQL Server 2005 están deshabilitados de forma predeterminada. ¿Los ha habilitado en "Administrador de configuración del servidor SQL"? Puede encontrar los protocolos en la configuración de red de SQL Server y en la configuración de SQL Native Client xx.

La conexión en el servidor funciona gracias al protocolo "Memoria compartida".

Hakan Winther
fuente
99
Estoy aceptando tu respuesta porque me llevó por el buen camino. En el Administrador de configuración de SQL Server, TCP / IP ya estaba habilitado todo el tiempo en "Configuración de red de SQL Server 2005> Protocolos para SQLEXPRESS" y "Configuración de cliente nativo de SQL> Protocolos de cliente". Canalizaciones con nombre ya estaba habilitado en este último. Lo habilité en el primero, pero eso no pareció ayudar (los mismos mensajes de error). Finalmente, cambié la fuente ODBC para usar el controlador "SQL Native Client" en lugar del controlador "SQL Server", y finalmente funcionó.
soapergem
Gracias SoaperGEM! ¡Nunca hubiera pensado haber probado SQL Native Client! ¡Trabajado como un encanto!
Phillip Senn
5

¿Ha habilitado el servicio del navegador SQL Server según Cómo configurar SQL Server 2005 para permitir conexiones remotas ?

Si está ejecutando SQL Server 2005 utilizando un nombre de instancia y no está utilizando un número de puerto TCP / IP específico en su cadena de conexión, debe habilitar el servicio del navegador SQL Server para permitir conexiones remotas. Por ejemplo, SQL Server 2005 Express se instala con un nombre de instancia predeterminado de Nombre del equipo \ SQLEXPRESS.

Sim
fuente
¿La conexión al servidor \ instancia en el local utiliza un mecanismo diferente al de forma remota?
Sam
@ Sam ver la respuesta de Hakan Winther.
Sim
4

Este hilo solucionó el mismo mensaje de error para mí cuando uso Access para conectarse a un servidor MSSQL 2008. MSSQL 2005 y versiones anteriores funcionaron bien simplemente usando el nombre de la computadora en la cadena de conexión, pero tuve que cambiar a la cadena de conexión en Access al formulario completo cuando la instancia se actualizó a 2008:

servername\instancename,portnumber

Mufasa
fuente
2
Eso lo hizo por mí, excepto que no necesitaba el número de puerto.
bgmCoder
2

Tuve este mismo problema y logré resolverlo cambiando el controlador SQL al controlador SQL Native Client también. Esto fue extraño ya que en mi caso esto había estado funcionando bien durante años y luego simplemente dejó de funcionar. Sospecho que esto es algo así como que el controlador está dañado, tal vez una reinstalación de MDAC podría ayudar, pero por el momento estoy feliz de que esté funcionando.


fuente
1

¿Reconocería el nombre del servidor si estuviera completamente calificado? Si fuera MYSERVER.domain.com? Hemos tenido que hacer eso con SQL Server cuando nos conectamos desde un dominio diferente. Si puede hacer que el DSN del sistema ODBC se conecte cuando pruebe la fuente de datos, está progresando. Si no se conecta en la configuración de ODBC, primero debe solucionarlo.

jueves
fuente
Eso es exactamente lo que estoy tratando de hacer: hacer que el DSN del sistema ODBC se conecte en primer lugar cuando pruebo la fuente de datos. Así que probé su sugerencia, probando ambas MYSERVER.domain.com\SQLEXPRESSy MYSERVER.domain.com, pero ambas me dieron los mismos errores que enumeré anteriormente, respectivamente.
Soapergem
En el símbolo del sistema en el otro tipo de computadora "nslookup MYSERVER.domain.com", ¿eso se resuelve en la dirección IP correcta (123.456.789.012) o en absoluto?
Sim
@Sim: sí, ese comando se resuelve correctamente.
soapergem el
1

¿Está utilizando canalizaciones con nombre o TCP en la conexión ODBC que funciona? ¿TCP está habilitado?

aNullValue
fuente
1

Asegúrese de tener las conexiones tcp remotas habilitadas para el servidor SQL.

Sam
fuente
0

Solo un tiro salvaje aquí, pero ¿qué sucede si coloca una barra diagonal inversa doble antes del nombre del servidor o la dirección IP? Simplemente me parece que normalmente se requiere para la mayoría de las otras conexiones de Windows / Microsoft.

John Gardeniers
fuente
Intentar con la barra diagonal inversa doble da como resultado el mismo error 1326 (el primero que enumeré).
Soapergem
0

Tuve un problema similar En mi caso, otro sw configura la configuración de ODBC para que no pueda cambiar el controlador. Resolví mi caso así:

  1. Establezca la configuración TCP / IP para que el servidor use el puerto 1433
  2. En el cliente, ingrese la dirección del servidor como: 192.168.1.5,1433 (sin nombre de instancia)

Entonces comenzó a funcionar. SO del cliente: Win7 x64 Controlador: sqlsrv32.dll

Mert Gülsoy
fuente
0

Por lo que vale, comencé a recibir este error en una conexión que había estado funcionando anteriormente. Resultó que el servicio MSSQL $ SQLEXPRESS se había detenido de alguna manera. Reiniciarlo solucionó el problema.

dsteele
fuente
0

También tuve este problema, y ​​fue tan simple como esto: el servidor listado como el servidor DNS primario para este servidor fue eliminado, y la aplicación ya no pudo resolver correctamente el nombre del servidor SQL en la red. Todo comenzó a funcionar de inmediato cuando corrigí el servidor DNS local a uno que funcionara.

yourcomputergenius
fuente