Проверка подлинности 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')