الاتصال بخادم MS SQL باستخدام Python على Linux مع "بيانات اعتماد Windows"

StackOverflow https://stackoverflow.com/questions/539430

سؤال

هل هناك أي طريقة للاتصال بقاعدة بيانات SQL Server MS مع Python على Linux باستخدام بيانات اعتماد مجال Windows؟

يمكنني الاتصال بخير تماما من جهاز Windows الخاص بي باستخدام بيانات اعتماد Windows، لكن محاولة القيام بنفس الشيء من Linux Python مع Pyodbs + FreeTDS + UnixoDBC

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

النتائج في هذا الخطأ:

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

أنا متأكد من أن كلمة المرور مكتوبة بشكل صحيح، لكنني جربت العديد من المجموعات المختلفة من اسم المستخدم:

DOMAIN\username
DOMAIN\\username

او حتى

UID=username;DOMAIN=domain

ولكن دون جدوى. أيه أفكار؟

هل كانت مفيدة؟

المحلول

كما أشار في أحد التعليقات، فإن هذه الجواب قديمة جدا الآن. أنا بانتظام واستخدام GSSAPI بشكل منتظم للمصادقة من Linux إلى SQL Server 2008 R2 ولكن في الغالب مع برنامج Easysoft ODBC Manager وبرنامج تشغيل EasySoft ODBC SQL Server (حسب التجاري).

في أوائل عام 2009، تمكنت زميل وأجريت من الاتصال بمثيل SQL Server 2005 من SOLARIS 10 باستخدام GSSAPI (بيانات اعتماد Kerberos) باستخدام DBB :: Perl عبر FreeTDS Build المرتبط بنسخة معينة من مكتبات MIT Kerberos. كانت الحيلة - وهذا صعب بعض الشيء أن تصدق ولكني عرضت عليه من خلال النظر من خلال شفرة المصدر FreeTDS - لتحديد طول صفر اسم االمستخدم. إذا كان طول سلسلة user_name 0 ثم سيحاول رمز FreeTDS استخدام GSSAPI (إذا تم تجميع هذا الدعم). لم أتمكن من القيام بذلك عبر Python و Pyodbc لأنني لم أتمكن من معرفة طريقة للحصول على ODBC لتقليل user_name بطول الطول.

هنا في رمز بيرل .. هناك فرص متعددة لملفات تكوين الكسر WRT مثل .freetds.conf وما إلى ذلك، يبدو أنني أتذكر أن المدير يجب أن يكون في حالة كبيرة ولكن يبدو أن ملاحظاتي في خلاف مع ذلك.

$ serverprincipal = 'mssqlsvc / foo.bar.yourdomain.com: 1433@yourdomain.com'؛ $ dbh = dbi-> connect ("dbi: sybase: server = theservername؛ kerberos = $ serverprincipal"، "، '')؛

يجب أن تعرف كيفية استخدام الأداة المساعدة SETSPN من أجل الحصول على خادم SQL Server لاستخدام الاسم الرئيسي للأمان المناسب.

ليس لدي أي معرفة بجانب كيربروس من الأشياء لأن بيئتنا تم إنشاء بيئتنا من قبل كيربروس ولها أشياء فاخرة مثل الثقة المتبادلة التي تم إعدادها بين المجال الإعلاني الذي يعمل خادم SQL و Arberos Domain كان عميلي يعمل في.

هناك بعض الكود http://code.google.com/p/libsqljdbc-auth/ الذي يقوم بمصادقة GSSAPI من Linux إلى SQL Server ولكنه Java فقط. كما ساهم المؤلف (الذي يعرف بأشياءه) أيضا بتصحيح مماثل لمشروع JTDS الذي يعمل مع إصدارات أكثر حداثة من Java التي تحتوي على GSSAPI.

وبالتالي فإن القطع كلها هناك، إنها مجرد فوضى كبيرة متشابكة تحاول الحصول عليها جميعا للعمل معا. لقد وجدت pyodbc إلى unixodbc إلى freetds ODBC تكامل TDS بجد / تصحيح. كانت الاشياء بيرل لأنها عبارة عن مجمع رفيع جدا على القمة إلى CT-LIB كان أسهل بكثير.

نصائح أخرى

اعتبارا من مارس 2013 على الأقل، يبدو أن هذا يعمل خارج الصندوق مع FreeTDs. حددت إصدار بروتوكول TDS. للحصول على قياس جيد - غير متأكد إذا كان هذا يجعل الفرق:

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

يبدو أن المصادقة المتكاملة مدعومة أيضا في برنامج التشغيل الرسمي ل Microsoft Linux: http://msdn.microsoft.com/en-us/library/hh568450.aspx. وبعد لست متأكدا من عدد توزيعات Linux التي تعمل بالفعل أو مقدار المصدر المتاح. يذكرون صراحة Rhel 5 و 6 وبعض التبعيات على تحميل الصفحة.

ربما بعد فوات الأوان لمساعدتك - لكنني واجهت نفس المشكلة. في وقت كتابة هذا التقرير، يسمح لي أحدث إصدار من Pyodbc بتسجيل الدخول باستخدام بيانات اعتماد Windows. فقط ترك الحقل UID فارغ في سلسلة الاتصال الخاصة بك مثل ذلك:

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

الآن يستخدم هذا بيانات اعتماد Windows الموجودة عند تسجيل الدخول ... لست متأكدا من كيفية تحديد أي بيانات اعتماد مجال Windows ARB ...

لم أفعل ذلك منذ فترة، لكنني أتذكر أكثر unixodbc + freetds + pyodbc شيء يجري صعبة بعض الشيء. ومع ذلك، يمكن القيام به، وبمجرد الإعداد، ليس الأمر صعبا.

يوفر موقع الويب هذا تعليمات جيدة للغاية:http://www.pauldeden.com/2008/12/how-to-setup-pyodbc-to-connect-to-msql.html (نسخة مؤرشفة على أرشيف الويب)

أيضا، في تجربتي، كان لدى Pyodbc قضايا تجميع / تشغيل على آلات Linux 64 بت. بسبب ذلك، استخدمنا في النهاية CEODBC. CEODBC ليست مستقرة تماما مثل pyodbc (واجهت أخطاء أكثر غير متوقعة مما كانت عليه في Pyodbc عند تشغيله في Python Prorgram)، ولكن من السهل للغاية الاستيقاظ والجري على Linux 64 بت.

لا أعتقد أنك ستتمكن من تسجيل الدخول إلى حساب مجال Windows بهذه الطريقة. تحتاج إلى إعداد مستخدم في SQL مباشرة لهذه الطريقة في تمرير بيانات الاعتماد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top