2009-02-11 3 views
6

Есть ли способ подключиться к базе данных MS SQL Server с помощью python on linux с использованием учетных данных Windows Domain Credentials?Подключение к MS SQL Server с использованием python в Linux с помощью «учетных данных Windows»

Я могу соединиться прекрасно с моей машины окна, используя учетные данные Windows, но пытается сделать то же самое с Linux питона с 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 

безрезультатно. Есть идеи?

ответ

4

Как указано в одном из комментариев, этот ответ довольно устарел. Я регулярно и регулярно использую GSSAPI для аутентификации с Linux на SQL Server 2008 R2, но в основном с менеджером EasySoft ODBC и (коммерческим) драйвером EasySoft ODBC SQL Server.

В начале 2009 года мы с коллегой смогли подключиться к экземпляру SQL Server 2005 из Solaris 10 с использованием GSSAPI (учетных данных Kerberos) с использованием DBB :: Perl над строкой FreeTDS, связанной с конкретной версией библиотек kerberos MIT , Трюк был - и это немного сложно поверить, но я проверил его, просмотрев исходный код FreeTDS - указать нулевую длину user_name. Если длина строки user_name равна 0, то код FreeTDS будет пытаться использовать GSSAPI (если эта поддержка была скомпилирована). Я не смог сделать это через Python и pyodbc, поскольку я не мог понять, как заставить ODBC передавать имя пользователя с нулевой длиной.

Здесь, в коде perl .. существует множество возможностей для поломки файлов конфигурации, таких как .freetds.conf и т. Д. Я, кажется, помню, что основной должен был быть в верхнем регистре, но мои заметки, похоже, не согласны с этим ,

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

Вы должны знать, как использовать SETSPN утилиту для того, чтобы получить сервер SQL Server использовать соответствующее имя участника безопасности.

У меня нет знаний о стороне кебероса, потому что наша среда была создана гуру Kerberos и имеет причудливые вещи, такие как взаимное доверие, установленное между доменом AD, в котором работает SQL Server, и домен Kerberos, в котором работал мой клиент.

Существует код http://code.google.com/p/libsqljdbc-auth/, который выполняет аутентификацию GSSAPI от Linux до SQL Server, но это только Java. Автор (который, похоже, знает свои вещи) также внес аналогичный патч в проект jTDS, который работает с более поздними версиями Java, в которых встроен GSSAPI.

Итак, все это есть, это просто большой запутанный беспорядок, пытаясь заставить их всех работать вместе. Я нашел pyodbc для unixODBC для FreeTDS odbc для интеграции с TDS довольно сложно отслеживать/отлаживать. Perl-материал, потому что это была довольно тонкая оболочка на вершине CT-Lib, было намного легче начать.

+2

Это эпическая сказка, но это слишком вводит в заблуждение, поскольку текущее состояние дел является как самым высоким, так и принятым ответом. Дайте мне знать, если вы отредактируете заявление об отказе от ответственности, и я удалю свой нижний план. – steamer25

0

Я не верю, что вы сможете войти в учетную запись домена Windows таким образом. Вам необходимо настроить пользователя в sql непосредственно для этого способа передачи учетных данных.

+0

Кажется, что сейчас это единственный практический способ. –

1

Я не сделал этого некоторое время, но я помню, что вся unixodbc + FreeTDS + pyobbc была немного сложной. Однако это можно сделать, и после установки это не так сложно.

Этот сайт предоставляет очень хорошие инструкции: http://www.pauldeden.com/2008/12/how-to-setup-pyodbc-to-connect-to-mssql.html (archived copy on Web Archive)

Кроме того, в моем опыте pyodbc был проблемы компиляции/запуска на 64-разрядных машинах Linux. Из-за этого мы в конечном итоге использовали ceODBC. ceODBC не так стабильен, как pyodbc (столкнулся с более неожиданными ошибками, чем в pyodbc при запуске в python prorgram), но очень легко встать и запустить на 64-разрядной версии Linux.

+0

Я уже использовал этот веб-сайт для инструкций, он не помогает в регистрации учетных данных Windows, хотя он дает хорошее представление о настройке всей системы. –

+0

Downvote, потому что этот ответ явно не адресован Интегрированной аутентификации/«Учетные данные Windows» для каждого вопроса. – steamer25

1

Возможно, слишком поздно, чтобы помочь вам, но я столкнулся с той же проблемой. На момент написания последней версии pyobbc позволяет мне войти в систему с учетными данными Windows. Просто оставьте поле пустым UID в строке подключения следующим образом:

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

Теперь это, используя существующие учетные данные окна, когда вы вошли в систему ... не знаю, как указать учетные данные домена Windows ARB ...

+0

Это работает от Linux? – tponthieux

+0

@tponthieux: Да, код (по крайней мере, в моем ответе) работает на Linux. – steamer25

+0

@anbanm, если вы указываете пароль в строке подключения, как эта интегрированная аутентификация? – Chetan

2

По крайней мере, в марте 2013 года это, как представляется, работает из коробки с FreeTDS. Я уточнил TDS protocol version для хорошей меры - не уверен, если это делает разницу:

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 и некоторые зависимости от download page.

+0

Это сработало для меня. Ключ добавляет домен объявления к имени пользователя. – stuckintheshuck

Смежные вопросы