Connexion à MS SQL Server à l'aide de python sur linux avec des informations d'Identification Windows'
Est-il possible de se connecter à un Serveur MS SQL base de données avec python sur linux Windows en utilisant les informations d'Identification de Domaine?
Je peut connecter parfaitement bien de mon ordinateur windows à l'aide des informations d'Identification Windows, mais de tenter de faire la même chose à partir d'un linux python avec pyodbs + freetds + unixodbc
>>import pyodbc
>>conn = pyodbc.connect("DRIVER={FreeTDS};SERVER=servername;UID=username;PWD=password;DATABASE=dbname")
résultats dans cette erreur:
class 'pyodbc.Error'>: ('28000', '[28000] [unixODBC][FreeTDS][SQL Server]Login incorrect. (20014) (SQLDriverConnectW)')
Je suis sûr que le mot de passe est écrit correctement, mais j'ai essayé beaucoup de différentes combinaisons de nom d'utilisateur:
DOMAIN\username
DOMAIN\\username
ou même
UID=username;DOMAIN=domain
en vain. Des idées?
Vous devez vous connecter pour publier un commentaire.
Comme l'a souligné dans un des commentaires, cette réponse est tout à fait obsolète maintenant. J'ai régulièrement et systématiquement recours à la GSSAPI pour authentifier à partir de Linux pour SQL Server 2008 R2, mais surtout avec la EasySoft ODBC manager et l' (commercial) EasySoft ODBC SQL Server driver.
Au début de 2009, un collègue et j'ai réussi à vous connecter à une instance de SQL Server 2005 à partir de Solaris 10 à l'aide de GSSAPI (informations d'identification Kerberos) à l'aide de DBB::Perl sur une FreeTDS construire liées à l'encontre d'une version particulière de MIT kerberos bibliothèques. Le truc, c'était-et c'est un peu difficile à croire, mais j'ai vérifié en regardant à travers les FreeTDS code source -- pour spécifier un de longueur nulle user_name. Si la longueur de la user_name chaîne est égale à 0, la FreeTDS code va tenter d'utiliser GSSAPI (si ce soutien a été mis en ligne). Je n'ai pas été en mesure de le faire via Python et pyodbc que je ne pouvais pas trouver un moyen de se ODBC de passe de longueur nulle user_name.
Ici dans le code perl .. il y a de multiples possibilités pour les bris wrt fichiers de configuration tels que .freetds.conf etc. Il me semble que le principal devait être en majuscules, mais mes notes semblent être en désaccord avec cela.
Vous devez savoir comment utiliser l'utilitaire setspn afin d'obtenir le Serveur SQL server à utiliser des mesures de sécurité appropriées nom principal.
Je n'ai pas de connaissance de l'kerberos côté des choses, parce que notre environnement a été créé par un Kerberos gourou et a la fantaisie des choses comme la confiance mutuelle mis en place entre l'ANNONCE de domaine que le Serveur SQL server est en cours d'exécution et le Kerberos domaine que mon client a été en cours d'exécution.
Il y a un peu de code http://code.google.com/p/libsqljdbc-auth/ qui ne l'authentification GSSAPI de Linux, SQL Server, mais c'est que Java. L'auteur (qui semble connaître son affaire) a également contribué un patch similaire à la jTDS projet, qui travaille avec les plus récentes versions de Java qui ont GSSAPI construit dans.
Si tous les morceaux sont là, c'est juste une grosse emmêlés en essayant de les amener à travailler ensemble. J'ai trouvé le pyodbc à unixODBC à FreeTDS odbc pour TDS intégration assez difficile de retrouver la trace/debug. Le perl truc parce que c'était une jolie wrapper mince sur le dessus de CT-Lib a été beaucoup plus facile à aller de l'avant.
À tout le moins au mois de Mars 2013, cela semble fonctionner hors de la boîte avec FreeTDS. J'ai précisé le Protocole TDS version pour faire bonne mesure--vous ne savez pas si ce qui fait la différence:
L'authentification intégrée semble également être pris en charge dans Microsoft officiel de pilote pour linux: http://msdn.microsoft.com/en-us/library/hh568450.aspx . Je ne suis pas sûr de savoir comment beaucoup de distributions Linux il fonctionne réellement ou combien de la source est disponible. Ils mentionnent explicitement RHEL 5 et 6 et des dépendances sur le page de téléchargement.
TDS_Version=7.2;
permis de domaine en fonction de connexion à sql server à partir d'un système d'exploitation basé sur linux pour une instance de sql server en cours d'exécution sur windows.Sans doute un peu trop tard pour vous aider - mais j'ai rencontré le même problème. Au moment de la rédaction, la dernière version de pyodbc me permet de vous connecter avec les informations d'identification windows. Il suffit de laisser le champ UID vide dans votre chaîne de connexion comme suit:
Maintenant, c'est en utilisant vos informations d'identification windows lorsque vous êtes connecté sur... pas sûr de la façon de spécifier n'importe quel cea windows informations d'identification de domaine...
Je ne l'ai pas fait, mais je me souviens de l'ensemble de la unixodbc + FreeTDS + pyodbc à la chose un peu délicate. Cependant, il peut être fait, et une fois l'installation, il n'est pas difficile.
Ce site web fournit de très bonnes instructions:
http://www.pauldeden.com/2008/12/how-to-setup-pyodbc-to-connect-to-mssql.html (copie archivée sur Web Archive)
Aussi, dans mon expérience, pyodbc eu des problèmes de compilation/exécution sur une version 64 bits de Linux machines. Parce que nous avons finalement utilisé ceODBC. ceODBC n'est pas aussi stable que pyodbc (rencontré des bugs que dans pyodbc lors de l'exécution en python prorgram), mais il est très facile de le faire fonctionner sur Linux 64 bits.
Je ne crois pas que vous serez en mesure de vous connecter à un compte de domaine windows de cette façon. Vous devez configurer un utilisateur dans sql directement pour cette manière de transmettre des informations d'identification.