pymssql windows 身份验证

pymssql windows authentication

用于支持windows 身份验证的pymssql 模块。现在好像没有了。尽管在某些地方它仍然表明它应该工作。我一直无法找到这个问题的明确答案,也没有找到解决方案。最相关 link:

https://groups.google.com/forum/#!topic/pymssql/QDMLTGBNeU0

pymssql 1.0 supported it because it made use of and depended on the MS-provided DLL which was part of the SQL Server client stack. This stack was in charge of handling all of the NTLM negotiation and such. This meant, among other things that it was a Windows-only solution.

我可以模拟多种网络环境,所以我尝试了很多不同的设置。我正在尝试使用此脚本通过 windows 身份验证连接到远程 MSSQL 服务器。这就是问题所在。


根据我的研究,包括上面的 links,有两种方法可以使用 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 模块也是如此。


注释:


关于该主题的其他问题:

pymssql: How to use windows authentication when running on a non-windows box

Unable to connect using pymssql with windows authentication

我最近遇到了同样的挑战。我最初也使用 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()

如果这不能解决您的问题,我希望它能让您更接近您的解决方案。

所以,我想我应该用我最终用来解决这个问题的方法来回答我自己的问题(已经几个月了)。

简答:我用了别的东西。

更长的答案:为了测试 windows 身份验证(当前登录的 windows 用户除外,它确实有效)我开始使用 SQLCMD tool from Microsoft, combined with PsExec.

我用 elevated (-h)load profile (-e) 执行的 PsExec旗帜。使用完整的用户名 DOMAIN\USERNAME.

我用trusted connection -E标志执行的SQLCMD。

剩下的由你决定。

我能够使用 python 2.7.11 64 位、pymssql 2.1.1 win 64、windows 10、sqlserver 2012 和 windows 身份验证解决此问题:

conn = pymssql.connect(server = 'EDDESKTOP', database = 'baseballData')

并在 Sql 服务器配置管理器 > Sql 服务器网络配置 -> MSSQLSERVER 协议中启用 tcp/ip 连接 -> TCP/IP 已启用

现在似乎可以使用了。 Python 3.6, Windows10.

conn = pymssql.connect(server='(local)', database='DbName')

如果在 RHEL 上,设置 FREETDSCONF 环境变量。 Pymssql 默认查找错误的地方:

os.environ["FREETDSCONF"] = "/etc/freetds.conf"