【问题标题】:pymssql windows authenticationpymssql windows 身份验证
【发布时间】:2015-06-03 16:03:24
【问题描述】:

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

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

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

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


根据我的研究,包括上面的链接,有两种方法可以使用 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
  • 用于支持 windows 身份验证的 pymssql 版本:1.x
  • 我已经测试过(所有 64 位):
    • Windows 7 专业版
    • Windows 7 家庭高级版
    • Windows 服务器 2012
    • Windows 服务器 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

【问题讨论】:

  • 你能列出你正在使用的 windows 版本,以及它“曾经工作”的 pymssql 和 windows 版本

标签: python windows-authentication pymssql


【解决方案1】:

我能够使用 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 配置管理器 > Sql Server 网络配置 -> MSSQLSERVER 的协议 -> 启用 TCP/IP 中启用 tcp/ip 连接

【讨论】:

  • 这对我不起作用。我得到 WinError 10061 无法建立连接,因为目标机器主动拒绝它。这是在同一台机器上从 Rapid SQL 成功连接之后。
【解决方案2】:

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

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

【讨论】:

  • 谢谢。这并不能解决我眼前的问题,但也许它能让我更接近。您能否提供您正在使用的库的链接?
  • 同样重要的是要注意,虽然数据库是在 .NET 应用程序中设置的,但如果我在 .NET 环境之外单独运行脚本,我就能够连接到服务器。
  • 当您找到解决方案时。我很乐意看看。我对自己的具体问题的答案很好奇。 patrickfalvey40@gmail.com
【解决方案3】:

现在看来可以了。 蟒蛇3.6, Windows 10。

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

【讨论】:

  • 还没有验证,我没有任何环境了。但这适用于非本地服务器吗?
【解决方案4】:

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

简答:我用了别的东西。

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

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

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

剩下的看你自己了。

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-13
      • 2010-10-05
      • 2013-10-30
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 2015-07-18
      相关资源
      最近更新 更多