2016-02-02 7 views
5

मैं Python 3.4 और pyodbc मॉड्यूल का उपयोग कर Windows Server 2008 R2 से SQL server 2000Windows server 2003 पर स्थापित करने के लिए कनेक्ट करने के लिए कोशिश कर रहा हूँ के साथ एक और डोमेन खिड़कियों कार्य केंद्र से एमएस एसक्यूएल सर्वर से कनेक्ट करने विंडोज़ प्रमाणीकरण का उपयोग कैसे करें। वे सर्वर अलग-अलग एडी डोमेन में हैं। SQL सर्वर पर Windows only प्रमाणीकरण सक्षम है और मैं इसे बदल नहीं सकता।अजगर

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) 

कनेक्शन ऊपर निम्न त्रुटि के साथ विफल:

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

वहाँ कुछ सवाल है, उदाहरण के लिए कर रहे हैं this one, खिड़कियां प्रमाणीकरण के समर्थन के लिए trusted_connection='yes' तर्क pyodbc के लिए कनेक्शन जोड़ने के लिए सुझाव दे लेकिन इस मामले में यह मदद नहीं करता है क्योंकि इस विकल्प के साथ स्थानीय क्रेडेंशियल्स का उपयोग किया जाता है और मुझे स्पष्ट रूप से प्रमाण-पत्र प्रदान करने की आवश्यकता होती है क्योंकि वर्कस्टेशन की उत्पत्ति एक अलग एडी डोमेन में होती है।

User DSNODBC Data Source AdministratorSQL Server ड्राइवर ऊपर उल्लिखित एक ही त्रुटि के साथ विफल रहता है।

क्या यह काम करने का कोई तरीका है?

इस बीच मैं http://sourceforge.net/projects/freetdswindows/ से विंडोज के लिए FreeTDS ड्राइवर स्थापित और कनेक्शन tsql सुविधा का उपयोग परीक्षण काम करता है:

tsql -S sql.my-domain.local -U my-domain.local\testuser -P password 

लेकिन FreeTDS ड्राइवर ODBC Data Source Administrator में उपलब्ध नहीं है। FreeTDS ड्राइवर पारंपरिक रूप से unixODBC के साथ प्रयोग किया जाता है। क्या pyodbc के साथ विंडोज वातावरण में इस ड्राइवर का उपयोग करना संभव है?

अद्यतन:

यह पता चला FreeTDS बाइनरी ऊपर उल्लेख किया है और साथ ही unixODBC शामिल हैं। freetds.conf, odbc.ini और odbcinst.ini का कॉन्फ़िगरेशन वर्णित किया गया था, उदाहरण के लिए, here। लेकिन इस बिंदु पर मुझे समझ में नहीं आता कि pyodbc को पता होना चाहिए कि FreeTDS ड्राइवर मौजूद है। और वास्तव में FreeTDS ड्राइवर के साथ कनेक्शन का प्रयास निम्नलिखित त्रुटि के साथ विफल:

pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] 
Data source name not found and no default driver specified (0) (SQLDriverConnect)') 

Pyodbc केवल ODBC Data Source Administrator में उपलब्ध ड्राइवरों के बारे में जानता:

ODBC Data Source Administrator screenshot

2 तरीके आगे बढ़ने के लिए कर रहे हैं। पहला विकल्प ODBC Data Source AdministratorFreeTDS ड्राइवर के बारे में पता होना है। यह प्राप्त करने के लिए कि रजिस्ट्री कुंजी HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers में नाम FreeTDS और मूल्य Installed के साथ एक नया मान बनाया जाना चाहिए। फिर में एक नई कुंजी HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI में बनाई गई है और FreeTDS ड्राइवर के लिए सेटिंग इस रजिस्ट्री कुंजी में स्ट्रिंग मान के रूप में सेट की गई हैं।

FreeTDS registry settings

इस प्रक्रिया FreeTDS चालक के पूरा होने के बाद ODBC Data Source Administrator में उपलब्ध हो गया लेकिन कनेक्शन अभी भी विफल रहा है। में User DSN बनाने का प्रयास FreeTDS त्रुटि कोड 193 के साथ विफल रहता है जो 64 बिट ODBC Data Source Administrator और 32 बिट संस्करण FreeTDS की असंगतता के कारण होता है। मेरे पास FreeTDS का 64 बिट संस्करण उपलब्ध नहीं है। संभावित रूप से इसे स्रोत से संकलित करना संभव हो सकता है।

एक और विकल्प pyodbcODBC Data Source Administrator के बजाय अन्य ड्राइवर प्रबंधक (unixODBC) का उपयोग करना है। अभी तक संपर्क करने के बारे में नहीं पता।

उत्तर

2

मैं http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql से प्राप्त व्हील के साथ स्थापित pymssql संस्करण 2.1.3 का उपयोग कर समाप्त हुआ। इसमें FreeTDS शामिल है और यह बॉक्स के ठीक बाहर काम करता है:

import pymssql 
conn = pymssql.connect(
    host=r'sql.my-domain.local', 
    user=r'my-domain.local\testuser', 
    password='password', 
    database='testdb' 
) 
cursor = conn.cursor() 
cursor.execute('SELECT * FROM testtable')