2010-11-11 47 views
8

Estoy intentando conectar con SQL Server que se ejecuta en el sistema Windows XP desde un sistema * nix en un servidor local a través de pymssql. Sin embargo, la conexión falla, como se muestra a continuaciónNo se puede conectar a SQL Server a través de pymssql

db = pymssql.connect(host='192.168.1.102',user='www',password='test',database='TestDB') 
Traceback (most recent call last): 

File "<stdin>", line 1, in <module> 
File "pymssql.pyx", line 457, in pymssql.connect (pymssql.c:6041) 
raise InterfaceError(e[0]) 
pymssql.InterfaceError: Connection to the database failed for an unknown reason. 

cosas que he intentado:

  1. Conjunto de SQL Server y el navegador que se ejecute como un servidor de red.
  2. Configure un usuario 'www'. También probé este usuario localmente en SQL Studio.
  3. Desactivado el cortafuegos de Windows (temporalmente, por supuesto).

Me falta ALGO - Simplemente no sé lo que es. Probé todas las opciones de menú infinito en Windows sin ningún resultado. Una cosa que noté es que si el Firewall de Windows está activado (configuro una excepción para SQL Server), python hace una pausa larga y luego da el error. Si el firewall está apagado, el error es instantáneo.

¿Hay registros que puedo mirar en SQL Server?

+0

para la depuración de bajo nivel use wireshark. –

+0

Gracias! Ejecuté wireshark y me proporcionó algunos datos, aparece un simple "ack". Sin embargo, no parece haber mucho para seguir. La información dice "ms-sql-s> 50051 [RST, ACK] Seq = 1 Ack = 1 Win = 0 Len = 0. – Christopher

+0

Veo más detalles. La" Información del experto "indica" Restablecimiento de la conexión (RST) "- no estoy seguro Por qué. – Christopher

Respuesta

11

¡Lo tengo! Creo que el origen del problema no fue darle a Free TDS la atención que necesita. Free TDS aparentemente es el controlador detrás de pymssql y proporciona conectividad a otras bases de datos, siendo SQL Server uno de ellos.

El archivo freetds.conf se encuentra en/usr/local/etc en mi sistema (Mac Book Pro).

Este archivo contiene los valores predeterminados de la instalación. Sin embargo, anteriormente había agregado una definición para poder conectarme, pero me olvidé de ella y lamentablemente no tomé notas sobre ella.

De todos modos, aquí es un ejemplo de lo que adjuntas a freetds.conf:

[SomeDB] 
    host = 192.168.1.102 
    port = 1219 
    tds version = 7.0 

Sin embargo, lo que resulta desconcertante es que establecer el puerto a 1219. Tenía que ajustar manualmente a 1433 en SQL Studio . También, estoy usando la versión 0.82 TDS así que no sé cómo se ajusta en 7,0

A continuación, me probaron utilizando la conectividad 'tsql' de la siguiente manera:.

tsql -S SomeDB -U www 

que introduzca la contraseña y recibe un comando -line que permite consultas SQL.

A continuación, he probado la conexión usando pymssql de la siguiente manera:

db = pymssql.connect(host='SomeDB',user='www',password='cylon',database='TestDB') 

Como se puede ver, que necesitaba usar el nombre de host del archivo freetds.conf y NO el IP directamente. Luego probé una consulta simple con código python adicional para asegurar que podía leer desde la base de datos.

Espero que esto ayude a alguien más en el futuro.

+0

Parece que no tengo un freetds.conf en mi sistema operativo Windows. Estoy obteniendo el mismo error con la cadena de conexión: 'host = 10.43.32.211: 1433, database = v000001, trusted = True' – IAbstract

+0

oh, tal vez' pymssql' no use una cadena de conexión sino params nombrados (a diferencia de algunas otras librerías) allí) ... un poco extraño, pero está bien. – IAbstract

0

es una máquina de las ventanas u trabajando? especifique el puerto 1433. parece ser un error en la API del cliente mssql, que intenta usar Namedpipes en lugar de TCP/IP.

+0

¡Gracias! Parece que necesito especificar el puerto 1433 específicamente. Wireshark muestra alguna otra respuesta sin el puerto. Con el puerto, muestra "ms-sql-s". – Christopher

2

Parece que usted tiene esta resuelto, pero para nadie más de Google que aterriza aquí: comprobar la autorización para hacer de modo mixto esté activado en su MS SQL Server.De manera predeterminada, solo permite la autorización de Windows, y eso causará este error en pymssql.

Cuestiones relacionadas