pymssql windows身份验证

时间:2015-03-30 15:02:12

标签: python windows-authentication pymssql

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

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

  

pymssql 1.0支持它,因为它利用并依赖于   MS提供的DLL,它是SQL Server客户端堆栈的一部分。这个   stack负责处理所有NTLM协商等。   这意味着它是一个仅限Windows的解决方案。

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


根据我的研究,包括上面的链接,有两种方法可以使用假设的pymssql模块进行Windows身份验证。

第一种方法:使用当前用户凭据:

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
  • 用于支持Windows身份验证的pymssql版本:1.x
  • 我测试过(全部64位):
    • windows 7 professional
    • windows 7 home premium
    • Windows Server 2012
    • Windows server 2012R2

关于该主题的其他问题:

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

Unable to connect using pymssql with windows authentication

https://stackoverflow.com/questions/27692366/mssql-python-windows-authentication

5 个答案:

答案 0 :(得分:6)

我能够使用python 2.7.11 64位,pymssql 2.1.1 win 64,windows 10,sqlserver 2012和Windows身份验证来解决这个问题:

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

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

答案 1 :(得分:2)

现在似乎有效。 Python 3.6, Windows 10。

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

答案 2 :(得分:1)

我最近遇到了同样的挑战。我最初也在使用Python 2.7和Windows身份验证。我能够连接的唯一方法是使用IronPython并导入clr模块。我不确定它为什么会起作用,并希望得到有关该主题知识的人的解释。一些不同之处在于我的服务器是本地服务器,内部数据库是由“实体框架 - 代码优先”组成的。这是最终将我连接到服务器的代码。

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()

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

答案 3 :(得分:1)

如果在RHEL上,请设置FREETDSCONF环境变量。默认情况下,Pymssql查找错误的位置:

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

答案 4 :(得分:0)

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

简短的回答:我使用了别的东西。

更长的答案:为了测试Windows身份验证(除了当前登录的Windows用户,这确实有效)我开始使用Microsoft的SQLCMD工具,并结合PsExec

我使用elevated ( - h)load profile ( - e)标记执行了PsExec。使用完整的用户名DOMAIN\USERNAME

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

其余由你决定。