Pregunta

¿Hay alguna manera de conectarse a una base de datos MS SQL Server con el pitón en Linux a través de las credenciales de dominio?

Puedo conectar perfectamente bien de mi máquina Windows utilizando las credenciales de Windows, pero tratando de hacer lo mismo desde una pitón Linux con pyodbs + + freetds unixodbc

>>import pyodbc
>>conn = pyodbc.connect("DRIVER={FreeTDS};SERVER=servername;UID=username;PWD=password;DATABASE=dbname")

Los resultados en este error:

class 'pyodbc.Error'>: ('28000', '[28000] [unixODBC][FreeTDS][SQL Server]Login incorrect. (20014) (SQLDriverConnectW)')

Estoy seguro de que la contraseña se escribe correctamente, pero lo he intentado muchas combinaciones diferentes de nombre de usuario:

DOMAIN\username
DOMAIN\\username

o incluso

UID=username;DOMAIN=domain

en vano. ¿Alguna idea?

¿Fue útil?

Solución

Como se señaló en uno de los comentarios, esta respuesta es bastante rancio por ahora. Yo utilizo regularmente y rutinariamente GSSAPI para autenticar desde Linux a SQL Server 2008 R2, pero sobre todo con el gerente EasySoft ODBC y el controlador ODBC SQL Server EasySoft (comercial).

A principios de 2009, un colega y yo nos las arreglamos para conectarse a una instancia de SQL Server 2005 desde Solaris 10 usando (credenciales Kerberos) GSSAPI usando DBB :: Perl más de un FreeTDS contru enlazados con una versión particular del MIT Kerberos bibliotecas. El truco era - y esto es un poco difícil de creer, pero he verificado que está mirando a través del código fuente FreeTDS - para especificar un de longitud cero nombre_de_usuario. Si la longitud de la cadena nombre_usuario es 0, entonces el código FreeTDS intentarán utilizar GSSAPI (si es que el apoyo ha sido recopilada en). No he sido capaz de hacerlo a través de Python y pyodbc ya que no podía encontrar una manera de conseguir ODBC para pasar por un nombre_usuario de longitud cero.

Aquí en el código Perl .. hay múltiples oportunidades para los archivos de configuración rotura wrt como .freetds.conf etc. Me parece recordar que el director tenía que estar en mayúsculas pero mis notas parecen estar en desacuerdo con eso.

$serverprincipal = 'MSSQLSvc/foo.bar.yourdomain.com:1433@YOURDOMAIN.COM';
$dbh = DBI->connect("dbi:Sybase:server=THESERVERNAME;kerberos=$serverprincipal", '', '');

Usted tendrá que saber cómo utilizar la utilidad setspn el fin de obtener el servidor SQL Server para utilizar el nombre principal de seguridad apropiado.

No tengo ningún conocimiento del lado del Kerberos de las cosas porque nuestro medio ambiente fue creado por un cabo y fuera gurú de Kerberos y tiene cosas de lujo como la confianza mutua establecida entre el dominio de AD que el SQL Server se está ejecutando y la Kerberos dominio que mi cliente se ejecuta en.

Hay un cierto código http://code.google.com/p/libsqljdbc- auth / el que hace la autenticación GSSAPI de Linux a SQL Server pero es sólo Java. El autor (que parece saber sus cosas) también ha contribuido un parche similar al proyecto jTDS que funciona con las versiones más recientes de Java que se han construido en GSSAPI.

Así que las piezas son todo lo que hay, es sólo un gran lío enredado tratando de conseguir que todos trabajen juntos. He encontrado el pyodbc a unixODBC a FreeTDS ODBC a la integración TDS muy difícil de rastrear / depuración. El material Perl porque era un envoltorio muy delgada en la parte superior a la TC-Lib era mucho más fácil para ponerse en marcha.

Otros consejos

A partir de, al menos, marzo de 2013, esto parece funcionar fuera de la caja con FreeTDS. He especificado el versión del protocolo TDS por si acaso - no estoy seguro si eso hace la diferencia:

connStr = "DRIVER={{FreeTDS}};SERVER={0};PORT=1433;TDS_Version=7.2;UID={1}\\{2};PWD={3}".format(hostname, active_directory_domain, username, password)

La autenticación integrada también parece estar apoyado en piloto oficial de Microsoft para Linux: http: //msdn.microsoft.com/en-us/library/hh568450.aspx. No estoy seguro de cómo muchas distribuciones de Linux que realmente funciona o qué parte de la fuente está disponible. Ellos mencionan explícitamente RHEL 5 y 6, y algunas dependencias en la página de descarga rel="nofollow"> href="https://www.microsoft.com/en-us/download/details.aspx?id=28160" .

Probablemente un poco demasiado tarde para ayudar a salir - pero se encontró con el mismo problema. En el momento de la escritura, la última versión del pyodbc me permite iniciar sesión con las credenciales de Windows. Acaba de salir al campo UID en blanco en la cadena de conexión de esta manera:

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=myserverinstance;DATABASE=mydatabase;UID=;PWD=mypassword')

Ahora bien, esto es utilizando las credenciales de Windows existentes cuando haya iniciado sesión ... no estoy seguro cómo especificar las credenciales de dominio de Windows arb ...

No he hecho desde hace tiempo, pero recuerdo todo el unixodbc + + FreeTDS cosa pyodbc ser un poco difícil. Sin embargo, se puede hacer, y una vez que la configuración no es tan difícil.

Este sitio web ofrece muy buenas instrucciones: http://www.pauldeden. com / 2008/12 / cómo-a-setup-a-pyodbc-connect-a-mssql.html (copia archivada en el Archivo de la web)

Además, en mi experiencia pyodbc tenía problemas de compilación / ejecución en máquinas Linux de 64 bits. Debido a que el tiempo utilizado ceODBC. ceODBC no es tan estable como pyodbc (encontró errores más inesperado que en pyodbc cuando se ejecuta en prorgram pitón), pero es muy fácil de poner en marcha en Linux de 64 bits.

No creo que usted será capaz de conectarse a una cuenta de dominio de las ventanas de esta manera. Es necesario configurar un usuario en SQL directamente para esta manera de pasar las credenciales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top