2015-03-30 2 views
10

Il modulo pymssql utilizzato per supportare l'autenticazione di Windows. Ora sembra che non lo faccia. Anche se in alcuni punti mostra ancora che dovrebbe funzionare. Non sono stato in grado di trovare una risposta definitiva a questo problema, né una soluzione. Link più rilevanti:pymssql windows authentication

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

pymssql 1.0 supportato perché è fatto uso di e dipendeva dal DLL di MS-condizione che faceva parte dello stack client di SQL Server. Questo stack era responsabile della gestione di tutte le negoziazioni NTLM e così via. Ciò significava, tra le altre cose, che si trattava di una soluzione solo per Windows.

Posso simulare molti tipi di ambienti di rete, quindi ho provato molte impostazioni diverse. Sto cercando di essere in grado di utilizzare questo script per connettersi a un server MSSQL remoto utilizzando l'autenticazione di Windows. E questo è il problema.


Secondo la mia ricerca, compresi i link di cui sopra, ci sono due modi per utilizzare l'autenticazione di Windows con il modulo pymssql che sono suppone a lavorare.

Primo metodo: Utilizzando le credenziali degli utenti attuali:

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

Secondo metodo: utilizzando una data credenziali degli utenti:

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. 

Lo stesso vale per l'utilizzo del modulo _mssql.


NOTE:

  • Python Versione: 2.7.8
  • versione di pymssql sto usando: 2.1.1
  • versione di pymssql che utilizzate per supportare l'autenticazione di Windows: 1 .x
  • Ho testato con (Tutti i 64 bit):
    • Windows 7 Professional
    • finestre premio 7 Home Server
    • Windows Server 2012
    • finestre 2012R2

Altre domande sull'argomento:

pymssql: How to use windows authentication when running on a non-windows box

Unable to connect using pymssql with windows authentication

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

+1

Riesci a elencare la versione di Windows che si sta utilizzando, ed entrambi pymssql e finestre versiosn dove "lavorava" – jsbueno

risposta

-1

Così, ho pensato che avrei dovuto rispondere alla mia stessa domanda (sono passati alcuni mesi) con il metodo che alla fine ho usato per risolvere questo problema.

Risposta breve: ho usato qualcos'altro. risposta

più lunga: Per testare l'autenticazione di Windows (diverso da quello attualmente connesso utente Windows, che fa il lavoro) ho iniziato ad usare SQLCMD strumento da Microsoft, combinata con PsExec.

Il PsExec ho eseguito con le elevated(-h) e load profile(-e) bandiere. Utilizzo del nome utente completo DOMAIN\USERNAME.

SQLCMD I eseguito con il flag trusted connection-E.

Il resto dipende da voi.

1

Ho avuto questa stessa sfida di recente. Inizialmente utilizzavo anche Python 2.7 e l'autenticazione di Windows. L'unico modo in cui ero in grado di connettersi era usando IronPython e importando il modulo clr. Non sono sicuro del motivo per cui ha funzionato e apprezzerei una spiegazione da parte di qualcuno che è ben informato sull'argomento. Alcune differenze sono che il mio server era locale e il database all'interno era formato con 'Entity framework-Code first'. Ecco il codice che finalmente mi ha collegato al server.

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() 

Se questo non risolve il problema, spero che ti avvicini alla soluzione.

+0

Grazie. Questo non risolve il mio problema immediato, ma forse mi avvicina. Potresti fornire un link alle librerie che stai utilizzando? –

+0

https://msdn.microsoft.com/en-us/magazine/cc300810.aspx –

+0

È anche importante notare che sebbene il database sia stato installato in un'applicazione .NET, sono riuscito a connettermi al server se ho eseguito lo script da solo, al di fuori dell'ambiente .NET. –

5

sono stato in grado di risolvere questo usando python 2.7.11 a 64 bit, pymssql 2.1.1 vincere 64, Windows 10, SQLServer 2012 con l'autenticazione di Windows:

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

e consentendo la connessione TCP/IP in Sql Server Configuration Manager> Sql Server Network Configuration -> Protocolli per MSSQLSERVER-> TCP/IP abilitato

0

Sembra che funzioni ora. Python 3.6, Windows 10.

conn = pymssql.connect(server='(local)', database='DbName') 
+0

non ho verificato, non ho più alcun ambiente per questo. ma funziona per server non locali? –

+0

Sì, funziona per i server remoti. –

1

Se su RHEL, impostare la variabile di ambiente FREETDSCONF. Pymssql guarda nei posti sbagliati per impostazione predefinita:

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