Подключение к SQL серверу с аутентификацией pyodb c, FreeTDS и Kerberos на macOS - PullRequest
0 голосов
/ 07 апреля 2020

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

Резюме: я могу подключиться к базе данных и запросить ее с помощью Аутентификация Kerberos через Azure Data Studio и t sql с FreeTDS. Я не могу подключиться к pyodb c. Я пробовал десятки разных конфигураций, но безуспешно.

Моя конечная цель - подключиться к серверной БД MS SQL с помощью python.

Спасибо за любой ввод.

Фон

macOS локального компьютера 10.15.4 Подключение к VPN, необходимое для аутентификации kerberos Успешно запрошены БД из Azure База данных Data Studio - Microsoft SQL Server 2016

FreeTDS

t sql -S -U 'directory \ username' -> Работает, может запрашивать БД

i sql

i sql dsn_name 'directory \ username' 'password'

error DIAG [42000] [FreeTDS] [SQL Server] Ошибка входа. Логин входит в ненадежный домен и не может использоваться с Windows аутентификацией.

i sql dsn_name 'directory \ username'

Ошибка: DIAG [42000] [FreeTDS] [SQL Сервер] Ошибка входа. Логин входит в ненадежный домен и не может использоваться с аутентификацией Windows.

pyodb c

cnxn = pyodb c .connect ('DSN = dsn_name; Trusted_Connection = yes ')

ошибка: pyodb c .ProgrammingError: (' 42000 ',' [42000] [FreeTDS] [SQL Server] Вход в систему не выполнен. Вход в систему от ненадежного домен и не может использоваться с Windows аутентификацией. (18452) (SQLDriverConnect) ')

cnxn = pyodb c .connect (' DSN = dsn_name; UID = каталог \ username; PWD = "пароль") ')

ошибка: DIAG [01000] [FreeTDS] [SQL Сервер] Не удалось подключиться к адаптивному серверу pyodb c .OperationalError: (' 08001 ',' [08001] [FreeTDS] [SQL Сервер] Невозможно подключиться к источнику данных (0) (SQLDriverConnect) ')

Конфигурация

krb5.conf

libdefaults

default_realm = домен

[realms]

domain_same_as_default = {

kd c = kdc_address

}

ODB c .ini

[dsn_name]

Описание = MS SQL Сервер

Драйвер = FreeTDS

Имя сервера = имя_сервера

odbcinst.ini

[FreeTDS]

Описание = Драйвер FreeTDS для Linux & MS SQL

Драйвер = / usr / local /lib/libtdsodbc.so

Setup = / usr / local / lib / libtdsodb c .so

UsageCount = 1

[ODBC] Trace = Да

TraceFile = / dev / stdout

freetds.conf

[имя_сервера] host = ip_address

port = port_num

database = db_name

REALM = DOMAIN

1 Ответ

0 голосов
/ 08 апреля 2020

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

con = pyodbc.connect(
    r"DRIVER={FreeTDS};"
    r'SERVER=mssql.mydomain.com;'
    r"PORT=1433;"
    r"DATABASE=my_db;"
    f"UID=MYDOMAIN\\my_username;"
    f"PWD=my_password;"
    r"TDS_Version=7.3;"
    r"Encrypt=yes;"
    r"Trusted_Connection=yes;"
)

Дай это вихрь? Две обратные косые черты (\\) необходимы для экранирования при использовании Windows аутентификации домена, что не является опечаткой. Главное, чего вам не хватает, это TDS_Version. Вы можете узнать больше о версиях TDS здесь: https://www.freetds.org/userguide/choosingtdsprotocol.htm

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...