Frage

Gibt es eine Möglichkeit zu einer MS SQL Server-Datenbank mit Python unter Linux mit Windows Domain Credentials verbinden?

Ich kann völlig in Ordnung Verbindung von meinem Windows-Rechner Windows-Anmeldeinformationen verwenden, sondern versuchen, das gleiche von einem Linux-Python zu tun mit pyodbs + freetds + unixodbc

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

Ergebnisse in diesem Fehler:

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

Ich bin sicher, dass das Passwort korrekt geschrieben ist, aber ich habe viele verschiedene Kombinationen von Benutzername versucht:

DOMAIN\username
DOMAIN\\username

oder auch

UID=username;DOMAIN=domain

ohne Erfolg. Irgendwelche Ideen?

War es hilfreich?

Lösung

Wie in einem der Kommentare darauf hingewiesen, diese Antwort ist mittlerweile ziemlich abgestanden. Ich regelmäßig und routinemäßig GSSAPI verwenden, um von Linux auf SQL Server 2008 R2 zu authentifizieren, aber vor allem mit dem Easysoft ODBC-Manager und den (kommerziellen) Easysoft ODBC SQL Server-Treiber.

Anfang 2009 ein Kollege und ich es geschafft, zu einer SQL Server 2005-Instanz von Solaris 10 unter Verwendung von GSSAPI (Kerberos-Anmeldeinformationen) mit DBB :: Perl verbinden über ein FreeTDS gegen eine bestimmte Version des MIT-Kerberos-Bibliotheken gelinkt bauen. Der Trick dabei war - und das ist ein wenig schwer zu glauben, aber ich habe es überprüft von der FreeTDS Quellcode der Suche durch - geben Sie eine Null-Länge user_name. Wenn die Länge der user_name Zeichenfolge 0 ist, dann wird der FreeTDS Code versuchen GSSAPI zu verwenden (wenn die Unterstützung kompiliert in wurde). Ich habe nicht in der Lage gewesen, dies über Python und Pyodbc zu tun, wie ich nicht einen Weg, um ODBC herausfinden konnte eine Null-Länge user_name zu überliefern.

Hier im Perl-Code .. gibt es mehrere Möglichkeiten zum Bruch WRT Konfigurationsdateien wie .freetds.conf etc. Ich zu erinnern scheint, dass der Auftraggeber in Groß sein musste, aber meine Notizen scheinen damit nicht einverstanden zu sein.

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

Sie müssen wissen, wie den setspn Dienstprogramm verwenden, um den SQL Server-Server zu verwenden, um die entsprechenden Sicherheitsprinzipalnamen zu erhalten.

Ich habe keine Kenntnis der kerberos Seite der Dinge, weil unsere Umgebung durch eine durch und durch Kerberos-Guru wurde eingerichtet und hat fancy stuff wie die gegenseitige Vertrauen zwischen der AD-Domäne einrichten, die die SQL Server in laufen und die Kerberos-Domäne, die mein Mandant in ausgeführt wurde.

Es gibt einige Code http://code.google.com/p/libsqljdbc- auth / die tut GSSAPI Authentifizierung von Linux auf SQL Server, aber es ist nur Java. Der Autor (wer seine Sachen zu wissen scheint) hat auch einen ähnlichen Patch zum jTDS Projekt beigetragen, die mit neueren Versionen von Java arbeitet, die in GSSAPI gebaut haben.

So sind die Stücke alle da sind, ist es nur ein großes Durcheinander versuchen, zusammen, um sie alle zu bekommen zu arbeiten. Ich fand die Pyodbc zu unixODBC FreeTDS odbc zu TDS Integration ziemlich hart / debug zu verfolgen. Das Perl-Zeug, weil es eine ziemlich dünne Hülle auf dem CT-Lib war viel einfacher war gehend zu erhalten.

Andere Tipps

Wie von mindestens März 2013 scheint dies mit FreeTDS aus dem Kasten heraus zu arbeiten. I angegebene TDS-Protokollversion für eine gute Maßnahme - nicht sicher, ob das macht den Unterschied:

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

Integrierte Authentifizierung erscheint auch in Microsofts offiziellen Treiber für Linux unterstützt werden: http: //msdn.microsoft.com/en-us/library/hh568450.aspx . Ich bin mir nicht sicher, wie viele Linux-Distributionen es tatsächlich funktioniert, oder wie viel von der Quelle zur Verfügung steht. Sie erwähnen ausdrücklich RHEL 5 und 6 und einige Abhängigkeiten von der Download-Seite .

Wahrscheinlich ein wenig zu spät, um Ihnen zu helfen - aber ich begegnete das gleiche Problem. Zum Zeitpunkt des Schreibens ermöglicht die neueste Version von Pyodbc mich mit Windows-Zugangsdaten einzuloggen. Lassen Sie das UID-Feld leer in Ihrer Verbindungszeichenfolge wie folgt:

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

Nun ist dies Ihre vorhandenen Windows-Anmeldeinformationen verwenden, wenn Sie auf ... nicht sicher, angemeldet sind, wie alle arb Windows-Domäne Anmeldeinformationen angeben ...

Ich habe es nicht in einer Weile getan, aber ich erinnere mich an die ganze unixodbc + FreeTDS + Pyodbc Sache ein wenig schwierig zu sein. Allerdings kann es geschehen, und wenn Setup ist es nicht so schwer.

Diese Website bietet eine sehr gute Anleitung: http://www.pauldeden. com / 2008/12 / how-to-setup-Pyodbc-to-connect-to-mssql.html (archivierten Kopie auf Webarchiv)

Auch in meiner Erfahrung Pyodbc Probleme hatten Kompilieren / Laufen auf 64-Bit-Linux-Maschinen. Aus diesem Grunde verwenden wir schließlich ceODBC. ceODBC ist nicht ganz so stabil wie Pyodbc (angetroffen unerwarteten Fehler als in Pyodbc wenn in Python prorgram ausgeführt wird), aber es ist sehr leicht zu bekommen und läuft auf Linux 64-Bit.

Ich glaube nicht, Sie in der Lage sein werden auf diese Weise zu einem Windows-Domäne-Konto einzuloggen. Sie benötigen einen Benutzer in SQL für diese Art der Weitergabe Anmeldeinformationen direkt einzurichten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top