próbuję połączyć się SQL server 2000
zainstalowanego na Windows server 2003
z Windows Server 2008 R2
użyciu Python 3.4
i pyodbc
moduł. Te serwery znajdują się w różnych domenach AD. Windows only
uwierzytelnianie jest włączone na serwerze SQL i nie mogę tego zmienić.Jak używać uwierzytelniania systemu Windows, aby połączyć się z serwerem MS SQL z okien stanowisku w innej domenie z Pythonem
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)
powyżej połączenie nie powiedzie się z powodu następującego błędu:
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)")
Istnieje kilka pytań, na przykład this one, sugerując, aby dodać trusted_connection='yes'
argument pyodbc
połączenie do wspierania uwierzytelniania systemu Windows, ale w tym przypadku nie pomaga, ponieważ z tą opcją używane są lokalne poświadczenia i muszę jawnie podać referencje, ponieważ pochodząca stacja robocza znajduje się w innej domenie AD.
Utworzenie User DSN
w ODBC Data Source Administrator
z SQL Server
powoduje błąd sterownika z tym samym błędem, o którym mowa powyżej.
Czy istnieje sposób, aby to zadziałało?
FreeTDS
Tymczasem Zainstalowałem sterowniki dla Windows z http://sourceforge.net/projects/freetdswindows/ i test połączenia za pomocą tsql
narzędzie działa:
tsql -S sql.my-domain.local -U my-domain.local\testuser -P password
Ale FreeTDS
kierowca nie jest dostępny w ODBC Data Source Administrator
. Sterownik jest zwykle używany z unixODBC
. Czy jest możliwe użycie tego sterownika w środowisku Windows z pyodbc
?
Aktualizacja:
Okazuje się FreeTDS
binarne wymienione powyżej obejmują unixODBC
również. Konfiguracja freetds.conf
, odbc.ini
i odbcinst.ini
została wykonana tak, jak opisano, na przykład, here. Ale w tym momencie nie rozumiem, jak powinienem wiedzieć, że istnieje sterownik . I rzeczywiście próba połączenia z FreeTDS
kierowcy nie powiedzie się z powodu następującego błędu:
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager]
Data source name not found and no default driver specified (0) (SQLDriverConnect)')
Pyodbc
wie tylko o kierowców dostępnych w ODBC Data Source Administrator
:
Istnieją 2 sposoby, aby ruszyć do przodu. Pierwszą opcją jest powiadomienie ODBC Data Source Administrator
o sterowniku FreeTDS
. Aby to osiągnąć, należy utworzyć nową wartość w kluczu rejestru HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers
o nazwie FreeTDS
i wartości Installed
. Następnie utworzono nowy klucz FreeTDS
w ustawieniach HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI
, a ustawienia dla sterownika FreeTDS
są ustawiane jako wartości łańcuchowe w tym kluczu rejestru.
Po zakończeniu tej procedury FreeTDS
sterownik stał się dostępny w ODBC Data Source Administrator
ale gra nadal nie powiodło się.Próba utworzenia User DSN
w ODBC Data Source Administrator
z FreeTDS
kończy się niepowodzeniem z kodem błędu 193
, który jest spowodowany niekompatybilnością 64-bitowej ODBC Data Source Administrator
i 32-bitowej wersji FreeTDS
. Nie mam dostępnej 64-bitowej wersji FreeTDS
. Potencjalnie możliwe byłoby skompilowanie go ze źródła.
Inną opcją jest sprawienie, aby pyodbc
używał innego menedżera sterowników (unixODBC
) zamiast ODBC Data Source Administrator
. Nie wiem, jak do tego podejść.