Проверка подлинности pymssql
Модуль pymssql, используемый для поддержки проверки подлинности Windows. Теперь кажется, что нет. Хотя в некоторых местах он все еще показывает, что он должен работать. Я не смог найти окончательного ответа на эту проблему или решения. Наиболее релевантная ссылка:
https://groups.google.com/forum/#!topic/pymssql/QDMLTGBNeU0
pymssql 1.0 поддержал его, потому что он использовал и зависел от MS-DLL, которая была частью стека клиента SQL Server. Эта стек отвечал за обработку всех переговоров NTLM и т.д. Это означало, среди прочего, что это решение для Windows.
Я могу моделировать многие виды сетевых сред, поэтому я попробовал много разных настроек. Я пытаюсь использовать этот script для подключения к удаленному серверу MSSQL с использованием проверки подлинности Windows. И это проблема.
Согласно моим исследованиям, включая ссылки выше, существует два способа использования проверки подлинности Windows с модулем pymssql, который должен работать.
Первый метод: Использование учетных данных текущих пользователей:
pymssql.connect(server='server')
# credentials come from active windows session
# some research shows that a "trusted=True" keyword should be provided.
Второй метод: Использование учетных данных определенных пользователей:
pymssql.connect(server='server', user=r'domain\user', password='pass')
# credentials are given in code and somehow converted to a
# windows authentication in the background
# some research shows that a "trusted=True" keyword should be provided.
То же самое касается использования модуля _mssql
.
ПРИМЕЧАНИЯ:
- Версия для Python: 2.7.8
- Версия pymssql Я использую: 2.1.1
- Версия pymssql, используемая для поддержки проверки подлинности Windows: 1.x
- Я тестировал (все 64 бит):
- windows 7 professional
- windows 7 home premium
- сервер windows 2012
- сервер windows 2012R2
Другие вопросы по теме:
pymssql: как использовать проверку подлинности Windows при работе в окне без окна
Невозможно подключиться с помощью pymssql с проверкой подлинности Windows
https://stackoverflow.com/info/27692366/mssql-python-windows-authentication
Ответы
Ответ 1
Итак, я решил, что должен ответить на свой вопрос (это было несколько месяцев) с помощью метода, который я в конечном счете использовал для решения этой проблемы.
Короткий ответ: я использовал что-то еще.
Более длинный ответ: для проверки проверки подлинности Windows (кроме текущего пользователя Windows, который работает) я начал использовать SQLCMD
tool от Microsoft, в сочетании с PsExec
.
PsExec я выполняется с флагами elevated
(- h) и load profile
(- e). Использование полного имени пользователя DOMAIN\USERNAME
.
SQLCMD I, выполненный с флагом trusted connection
-E.
Остальное зависит от вас.
Ответ 2
Мне удалось решить эту проблему, используя python 2.7.11 64 бит, pymssql 2.1.1 win 64, windows 10, sqlserver 2012 с проверкой подлинности Windows:
conn = pymssql.connect(server = 'EDDESKTOP', database = 'baseballData')
И включение подключения tcp/ip в Sql Server Configuration Manager > Конфигурация сети Sql Server → Протоколы для MSSQLSERVER- > Включено TCP/IP
Ответ 3
У меня была такая же проблема в последнее время. Сначала я также использовал Python 2.7 и проверку подлинности Windows. Единственный способ, которым я смог подключиться, - это использовать IronPython и импортировать модуль clr. Я не уверен, почему это сработало, и я хотел бы получить объяснение от кого-то, кто хорошо разбирается в этом вопросе. Некоторые отличия в том, что мой сервер был локальным, а база данных внутри была сформирована с помощью "Entity framework-Code first". Вот код, который, наконец, подключил меня к серверу.
import clr
clr.AddReference('System.Data')
from System.Data.SqlClient import *
Conn_string = 'data source=Server_Name; initial catalog=Database_Name; trusted_connection=True'
ScheduleConn = SqlConnection(Conn_string)
ScheduleConn.Open()
Если это не решит вашу проблему, я надеюсь, что это приблизит вас к вашему решению.
Ответ 4
Если на RHEL задайте переменную среды FREETDSCONF. Pymssql по умолчанию выглядит не в том месте:
os.environ["FREETDSCONF"] = "/etc/freetds.conf"
Ответ 5
Кажется, он работает сейчас.
Python 3.6,
Windows 10.
conn = pymssql.connect(server='(local)', database='DbName')