2009-02-11 9 views
6

के साथ लिनक्स पर पायथन का उपयोग कर एमएस एसक्यूएल सर्वर से कनेक्ट करना क्या Windows डोमेन प्रमाण-पत्रों का उपयोग कर लिनक्स पर पायथन के साथ एक एमएस SQL ​​सर्वर डेटाबेस से कनेक्ट करने का कोई तरीका है?'विंडोज प्रमाण पत्र'

मैं अपने विंडोज़ मशीन विंडोज साख का उपयोग कर, लेकिन pyodbs + freetds + unixodbc ऐसा गलती से हुआ

>>import pyodbc 
>>conn = pyodbc.connect("DRIVER={FreeTDS};SERVER=servername;UID=username;PWD=password;DATABASE=dbname") 

परिणाम के साथ एक linux अजगर से भी ऐसा ही करने का प्रयास कर रहा से बिल्कुल ठीक कनेक्ट कर सकते हैं:

class 'pyodbc.Error'>: ('28000', '[28000] [unixODBC][FreeTDS][SQL Server]Login incorrect. (20014) (SQLDriverConnectW)') 

मुझे यकीन है कि पासवर्ड सही ढंग से लिखा गया है, लेकिन मैंने उपयोगकर्ता नाम के कई अलग-अलग संयोजनों की कोशिश की है:

DOMAIN\username 
DOMAIN\\username 

या यहाँ तक कि

UID=username;DOMAIN=domain 
कोई लाभ नहीं हुआ

। कोई विचार?

उत्तर

4

जैसा कि टिप्पणियों में से एक में बताया गया है, यह उत्तर अब तक काफी पुराना है। मैं नियमित रूप से और नियमित रूप से लिनक्स से एसक्यूएल सर्वर 2008 आर 2 से प्रमाणित करने के लिए जीएसएसएपीआई का उपयोग करता हूं, लेकिन ज्यादातर ईज़ीएसओफ्ट ओडीबीसी मैनेजर और (वाणिज्यिक) इज़ीसोफ्ट ओडीबीसी एसक्यूएल सर्वर ड्राइवर के साथ।

शुरूआती 2009 में एक सहयोगी और मैं जीएसएसएपीआई (Kerberos क्रेडेंशियल्स) का उपयोग कर Solaris 10 से एक SQL सर्वर 2005 उदाहरण से कनेक्ट करने के DBB :: पर्ल का उपयोग कर प्रबंधित पर एक FreeTDS एमआईटी का एक विशेष संस्करण के खिलाफ जुड़ा हुआ निर्माण पुस्तकालयों Kerberos । चाल थी - और यह विश्वास करना थोड़ा मुश्किल है, लेकिन मैंने फ्रीटीएसएस स्रोत कोड को देखकर इसे सत्यापित किया है - शून्य-लंबाई उपयोगकर्ता_नाम निर्दिष्ट करने के लिए। यदि उपयोगकर्ता_नाम स्ट्रिंग की लंबाई 0 है तो फ्रीटीडीएस कोड जीएसएसएपीआई (यदि वह समर्थन संकलित किया गया है) का उपयोग करने का प्रयास करेगा। मैं पाइथन और पायडबैक के माध्यम से ऐसा करने में सक्षम नहीं हूं क्योंकि मैं शून्य-लंबाई उपयोगकर्ता_नाम को पार करने के लिए ओडीबीसी प्राप्त करने का एक तरीका नहीं समझ पाया।

यहां परल कोड में .. ब्रेकेज wrt कॉन्फ़िगरेशन फ़ाइलों जैसे .freetds.conf आदि के लिए कई अवसर हैं। मुझे याद है कि प्रिंसिपल को अपरकेस में होना था, लेकिन मेरे नोट्स असहमत हैं ।

 
$serverprincipal = 'MSSQLSvc/foo.bar.yourdomain.com:[email protected]'; 
$dbh = DBI->connect("dbi:Sybase:server=THESERVERNAME;kerberos=$serverprincipal", '', ''); 

आप होगा पता है कि कैसे आदेश उचित सुरक्षा प्रिंसिपल नाम का उपयोग करने एसक्यूएल सर्वर सर्वर प्राप्त करने के लिए Setspn उपयोगिता का उपयोग करने के लिए।

मुझे चीजों के केर्बेरोस पक्ष का कोई ज्ञान नहीं है क्योंकि हमारे पर्यावरण को बाहर और बाहर केर्बेरोज गुरु द्वारा स्थापित किया गया था और इसमें एडी डोमेन के बीच स्थापित पारस्परिक ट्रस्ट की तरह फैंसी चीजें हैं जो SQL सर्वर चल रहा है और Kerberos डोमेन जो मेरा क्लाइंट चल रहा था।

कुछ कोड http://code.google.com/p/libsqljdbc-auth/ है जो लिनक्स से SQL सर्वर तक GSSAPI प्रमाणीकरण करता है लेकिन यह केवल जावा है। लेखक (जो अपनी सामग्री को जानते हैं) ने जेटीडीएस प्रोजेक्ट में भी इसी तरह के पैच का योगदान दिया है जो जावा के हाल के संस्करणों के साथ काम करता है जिसमें जीएसएसएपीआई निर्मित है।

तो टुकड़े सब वहाँ हैं, यह सिर्फ एक बड़ा है घबराहट गड़बड़ उन सभी को मिलकर काम करने की कोशिश कर रही है। मैंने pixbc को यूनिक्सोडबीसी को फ्रीटीएसडी ओडीबीसी को टीडीएस एकीकरण में ट्रेस/डिबग करने के लिए बहुत मुश्किल पाया। पर्ल सामान क्योंकि यह सीटी-लिब के शीर्ष पर एक बहुत पतला रैपर था, जाने के लिए बहुत आसान था।

+2

यह सुनिश्चित करने के लिए एक महाकाव्य कथा है लेकिन अब यह वर्तमान स्थिति के लिए बहुत ही भ्रामक है जो उच्चतम और स्वीकार्य उत्तर दोनों है। यदि आप अस्वीकरण में संपादित करते हैं तो मुझे बताएं और मैं अपना डाउनवोट हटा दूंगा। – steamer25

0

मुझे विश्वास नहीं है कि आप इस तरह से एक विंडोज डोमेन खाते में लॉग इन करने में सक्षम होंगे। आपको प्रमाण पत्र उत्तीर्ण करने के इस तरीके के लिए सीधे उपयोगकर्ता को एसक्यूएल में स्थापित करने की आवश्यकता है।

+0

ऐसा लगता है कि यह अभी के लिए जाने का एकमात्र व्यावहारिक तरीका है। –

1

मैंने इसे थोड़ी देर में नहीं किया है, लेकिन मुझे याद है कि पूरे यूनिक्सोडबैक + फ्रीटीडीएस + पायडबैक चीज थोड़ा मुश्किल है। हालांकि, यह किया जा सकता है, और एक बार सेटअप यह मुश्किल नहीं है।

इस वेबसाइट प्रदान करता है बहुत अच्छा निर्देश: http://www.pauldeden.com/2008/12/how-to-setup-pyodbc-to-connect-to-mssql.html (archived copy on Web Archive)

इसके अलावा, में मेरे अनुभव pyodbc संकलन/64 बिट लिनक्स मशीनों पर चल रहे मुद्दों था। इसके कारण हमने अंततः सीओओडीबीसी का इस्तेमाल किया। सीओओडीबीसी पाइडबैक के रूप में काफी स्थिर नहीं है (पायथन प्रोग्राम में चलते समय पीओओडीबीसी की तुलना में अधिक अप्रत्याशित बग का सामना करना पड़ा), लेकिन लिनक्स 64 बिट पर उठना और चलना बहुत आसान है।

+0

मैंने पहले से ही निर्देशों के लिए उस वेबसाइट का उपयोग किया है, यह विंडोज प्रमाण पत्र लॉगिन के साथ मदद नहीं करता है, हालांकि यह पूरे सिस्टम को स्थापित करने के लिए एक अच्छा परिचय प्रदान करता है। –

+0

डाउनवोट क्योंकि यह उत्तर स्पष्ट रूप से प्रश्न के अनुसार एकीकृत प्रमाणीकरण/"विंडोज प्रमाण पत्र" को संबोधित नहीं करता है। – steamer25

1

शायद आपकी मदद करने में थोड़ा देर हो चुकी है - लेकिन मुझे एक ही समस्या का सामना करना पड़ा। लिखने के समय, pyodbc का नवीनतम संस्करण मुझे विंडोज प्रमाण-पत्रों के साथ लॉगिन करने की अनुमति देता है। बस इतना की तरह अपने कनेक्शन स्ट्रिंग में यूआईडी क्षेत्र को खाली छोड़:

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=myserverinstance;DATABASE=mydatabase;UID=;PWD=mypassword') 

अब इस अपने मौजूदा खिड़कियों साख है जब आप पर ... यकीन नहीं किसी भी एआरबी विंडोज़ डोमेन क्रेडेंशियल्स निर्दिष्ट करने के लिए कैसे लॉग इन होते हैं उपयोग कर रहा है ...

+0

यह लिनक्स से काम करता है? – tponthieux

+0

@tponthieux: हां, कोड (कम से कम मेरे उत्तर में) लिनक्स पर काम करता है। – steamer25

+0

@anbanm, अगर आप कनेक्शन स्ट्रिंग में पासवर्ड निर्दिष्ट कर रहे हैं, तो यह एकीकृत प्रमाणीकरण कैसा है? – Chetan

2

कम से कम मार्च 2013 तक, यह फ्रीटीडीएस के साथ बॉक्स से बाहर काम करता प्रतीत होता है। मैं अच्छा उपाय TDS protocol version निर्दिष्ट - यकीन नहीं है कि अगर फर्क नहीं पड़ता: http://msdn.microsoft.com/en-us/library/hh568450.aspx:

connStr = "DRIVER={{FreeTDS}};SERVER={0};PORT=1433;TDS_Version=7.2;UID={1}\\{2};PWD={3}".format(hostname, active_directory_domain, username, password) 

एकीकृत प्रमाणीकरण भी लिनक्स के लिए माइक्रोसॉफ्ट के आधिकारिक ड्राइवर में समर्थन किया जाना प्रतीत होता है। मुझे यकीन नहीं है कि यह वास्तव में कितने लिनक्स वितरण पर काम करता है या कितना स्रोत उपलब्ध है। वे स्पष्ट रूप से download page पर आरएचईएल 5 और 6 और कुछ निर्भरताओं का उल्लेख करते हैं।

+0

यह मेरे लिए काम किया। कुंजी विज्ञापन डोमेन को उपयोगकर्ता नाम पर प्रीपेड कर रही थी। – stuckintheshuck