web-dev-qa-db-fra.com

authentification pymssql windows

Le module pymssql utilisé pour prendre en charge l’authentification Windows. Maintenant, il semble que non. Bien que, dans certains endroits, cela montre encore que cela devrait fonctionner. J'ai été incapable de trouver une réponse définitive à ce problème, ni une solution. Lien le plus pertinent:

https://groups.google.com/forum/#!topic/pymssql/QDMLTGBNeU0

pymssql 1.0 l’a soutenu car il utilisait et dépendait du DLL fourni par MS qui faisait partie de la pile de clients SQL Server. Ce pile était en charge de gérer toute la négociation NTLM et autres. Cela signifiait, entre autres choses, qu’il s’agissait d’une solution exclusivement Windows. 

Je peux simuler de nombreux types d’environnements réseau, c’est pourquoi j’ai essayé différentes configurations. J'essaie de pouvoir utiliser ce script pour me connecter à un serveur MSSQL distant à l'aide de l'authentification Windows. Et c'est le problème.


Selon mes recherches, y compris les liens ci-dessus, il existe deux manières d'utiliser l'authentification Windows avec le module pymssql qui fonctionnent supposées _.

Première méthode: Utilisation des informations d'identification des utilisateurs actuels:

pymssql.connect(server='server') 
# credentials come from active windows session
# some research shows that a "trusted=True" keyword should be provided.

Deuxième méthode: Utilisation des informations d'identification d'un utilisateur donné:

pymssql.connect(server='server', user=r'domain\user', password='pass') 
# credentials are given in code and somehow converted to a 
# windows authentication in the background
# some research shows that a "trusted=True" keyword should be provided.

Il en va de même pour l'utilisation du module _mssql.


REMARQUES: 

  • Version Python: 2.7.8 
  • Version de pymssql que j'utilise: 2.1.1 
  • Version de pymssql qui prenait en charge l'authentification Windows: 1.x 
  • J'ai testé avec (tous les 64 bits):
    • windows 7 professionnel
    • windows 7 Édition Familiale Premium
    • serveur Windows 2012
    • serveur Windows 2012R2

Autres questions sur le sujet:

pymssql: Comment utiliser l'authentification Windows lors de l'exécution sur une boîte autre que Windows

Impossible de se connecter à l'aide de pymssql avec l'authentification Windows

https://stackoverflow.com/questions/27692366/mssql-python-windows-authentication

12
Inbar Rose

Alors, j’ai pensé que je devrais répondre à ma propre question (cela fait quelques mois) avec la méthode que j’ai finalement utilisée pour résoudre ce problème.

Réponse courte: j'ai utilisé autre chose.

Réponse plus longue: pour tester l'authentification Windows (autre que l'utilisateur actuellement connecté à Windows, qui fonctionne), j'ai commencé à utiliser SQLCMD tool de Microsoft, associé à PsExec .

Le psExec que j'ai exécuté avec les indicateurs elevated(-h) et load profile(-e). Utilisation du nom d'utilisateur complet DOMAIN\USERNAME.

Le SQLCMD que j'ai exécuté avec l'indicateur trusted connection-E

Le reste dépend de toi.

0
Inbar Rose

J'ai pu résoudre ce problème en utilisant python 2.7.11 64 bits, pymssql 2.1.1 win 64, windows 10, sqlserver 2012 avec authentification Windows par:

conn = pymssql.connect(server = 'EDDESKTOP', database = 'baseballData')

Et l'activation de la connexion TCP/IP dans Gestionnaire de configuration SQL Server> Configuration réseau de SQL Server -> Protocoles pour MSSQLSERVER-> TCP/IP activé

6
Ed G

Il semble que cela fonctionne maintenant ... Python 3.6, Windows 10.

conn = pymssql.connect(server='(local)', database='DbName')
2
Igor Tkachenko

Si vous utilisez RHEL, définissez la variable d'environnement FREETDSCONF. Pymssql cherche aux mauvais endroits par défaut:

os.environ["FREETDSCONF"] = "/etc/freetds.conf"
1
runamoker

J'ai eu ce même défi récemment. J'utilisais aussi Python 2.7 et l'authentification Windows au début. La seule façon dont j'ai pu me connecter était d'utiliser IronPython et d'importer le module clr. Je ne suis pas sûr de savoir pourquoi cela a fonctionné et apprécierais une explication de quelqu'un qui connaît bien le sujet. Quelques différences sont que mon serveur était local et que la base de données à l'intérieur était formée avec 'Entity framework-Code first'. Voici le code qui m'a finalement connecté au serveur.

import clr
clr.AddReference('System.Data')
from System.Data.SqlClient import *

Conn_string = 'data source=Server_Name; initial catalog=Database_Name; trusted_connection=True'
ScheduleConn = SqlConnection(Conn_string)
ScheduleConn.Open()

Si cela ne résout pas votre problème, j'espère que cela vous rapprochera de votre solution.

1
Patrick Falvey