Как использовать аутентификацию пользователя / пароля для учетной записи Active Directory с pyodbc в Linux - PullRequest
0 голосов
/ 01 ноября 2019

Я должен подключиться к SQL Server, используя pyodbc на Linux. Учетная запись является учетной записью Active Directory. Используя pymssql, я могу подключиться, указав corp\svc_account. Но на pyodbc соединение не устанавливается.

С pyodbc кажется, что мы можем использовать только доверенное соединение ИЛИ пользователь / пароль. И пользователь / пароль работает только для аутентификации SQL Server - не Active Directory.

Но с pymssql кажется, что мы можем подключиться, используя аутентификацию Active Directory с именем пользователя / паролем.

Есть ли способ использовать мои учетные данные Active Directory с pyodbc?

Я также не хочу устанавливать клиент Kerberos.

1 Ответ

0 голосов
/ 03 ноября 2019

Вам нужно настроить PYODBC для использования драйвера FreeTDS вместо драйвера microsoft odbc, и вы должны убедиться, что вы указали все правильные параметры для вашего соединения.

Получение FreeTDS для работы с pyodbc можетбыть немного запутанным и хитрым.

  1. Убедитесь, что у вас установлен FreeTDS.

  2. Найдите файл конфигурации драйвера odbc (odbcinst.ini).

❯ odbcinst -j
unixODBC 2.3.7
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /Users/<user>/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

В моем случае файл находится по адресу /usr/local/etc/odbcinst.ini.

Убедитесь, что в вашем файле конфигурации драйвера есть запись для драйвера FreeTDS.

В моем случае на компьютере Mac odbcinst.ini есть эта запись:

[FreeTDS]
Description=TD Driver (MSSQL)
Driver=/usr/local/lib/libtdsodbc.so
Setup=/usr/local/lib/libtdsodbc.so
FileUsage=1

Когда вы указываете driver в pyodbc, это файл, в котором он ищет.

Теперь это должно работать.
import pyodbc
cnx = pyodbc.connect(
    server="myserver.com",
    database="mydb",
    user="domain\user",
    password="mypassword",
    port="1433",
    driver='FreeTDS',
    TDS_Version='7.4',
)

Некоторые примечания:

  1. При наличии активной учетной записи каталога обязательно укажите домен в поле user.

  2. Такие параметры, как TDS_Version, не учитываются в odbcinst.ini. Поэтому, если вы получаете сообщение об ошибке, например [FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect), вам может потребоваться указать TDS_Version в connect.

...