Sto cercando di connettersi a SQL server 2000
installato sul Windows server 2003
da Windows Server 2008 R2
utilizzando il modulo Python 3.4
e pyodbc
. Questi server si trovano in diversi domini AD. L'autenticazione Windows only
è abilitata sul server SQL e non posso cambiarla.Come utilizzare l'autenticazione di Windows per la connessione al server MS SQL da workstation Windows in un altro dominio con Python
drv = '{SQL server}'
svr = 'sql.my-domain.local'
usr = 'my-domain.local\testuser'
pwd = 'password'
db = 'testdb'
pyodbc.connect(driver=drv, server=svr, user=usr, password=pwd, database=db)
Il collegamento sopra non riesce con il seguente errore:
pyodbc.Error: ('28000', "[28000] [Microsoft][ODBC SQL Server Driver][SQLServer]
Login failed for user 'svx-iroot.local\\sqlexecutive'.
Reason: Not associated with a trusted SQL Server connection. (18452) (SQLDriverConnect)")
Ci sono alcune domande, ad esempio this one, suggerendo di aggiungere trusted_connection='yes'
argomento pyodbc
collegamento per il supporto di autenticazione di Windows, ma in questo caso non aiuta perché con questa opzione vengono utilizzate le credenziali locali e devo fornire esplicitamente le credenziali perché la workstation di origine si trova in un dominio AD diverso.
La creazione di in ODBC Data Source Administrator
con il driver SQL Server
non riesce con lo stesso errore sopra menzionato.
C'è un modo per farlo funzionare?
Nel frattempo ho installato FreeTDS
driver Windows da http://sourceforge.net/projects/freetdswindows/ e test di connessione utilizzando tsql
utility funziona:
tsql -S sql.my-domain.local -U my-domain.local\testuser -P password
Ma FreeTDS
driver non è disponibile in ODBC Data Source Administrator
. Il driver FreeTDS
viene tradizionalmente utilizzato con unixODBC
. È possibile utilizzare questo driver in ambiente Windows con pyodbc
?
Aggiornamento:
Si scopre FreeTDS
binari di cui sopra comprendono unixODBC
pure. La configurazione di freetds.conf
, odbc.ini
e odbcinst.ini
è stata effettuata come descritto, ad esempio here. Ma a questo punto non capisco come si supponga che pyodbc
sappia che esiste il driver FreeTDS
. E in effetti tentativo di connessione con FreeTDS
driver non riesce con il seguente errore:
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager]
Data source name not found and no default driver specified (0) (SQLDriverConnect)')
Pyodbc
conosce solo i driver disponibili in ODBC Data Source Administrator
:
Ci sono 2 modi per andare avanti. La prima opzione è quella di rendere il ODBC Data Source Administrator
consapevole del driver FreeTDS
. Per ottenere questo è necessario creare un nuovo valore nella chiave di registro HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers
con nome FreeTDS
e nel valore Installed
. Quindi una nuova chiave FreeTDS
viene creata in HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI
e le impostazioni per il driver FreeTDS
vengono impostate come valori stringa in questa chiave di registro.
Dopo il completamento di questo driver procedimento FreeTDS
è diventato disponibile in ODBC Data Source Administrator
ma la connessione ancora non è riuscito.Tentativo di creare ODBC Data Source Administrator
con ODBC Data Source Administrator
con FreeTDS
non riuscito con il codice di errore 193
causato dall'incompatibilità di 642 ODBC Data Source Administrator
e dalla versione a 32 bit FreeTDS
. Non ho una versione a 64 bit di FreeTDS
disponibile. Potenzialmente potrebbe essere possibile compilarlo dalla fonte.
Un'altra opzione è quella di rendere pyodbc
un altro gestore di driver (unixODBC
) anziché ODBC Data Source Administrator
. Non so come affrontarlo ancora.