使用pyodbc从Linux认证到Windows SQL Server

问题描述 投票:4回答:3

我正在尝试使用pyodbc从Linux计算机连接到Windows SQL Server。

我确实有两个限制:

  • 需要使用Windows域帐户登录
  • 需要使用python3
  • 需要从Linux到Windows进行此操作
  • 需要连接到特定实例

我按照微软的描述设置了环境并使其正常运行(我可以导入pyodbc并使用配置的贻贝驱动程序)。

我不熟悉Windows域身份验证,但不熟悉,所以这里就是我的问题所在。

我的连接字符串:

DRIVER={ODBC Driver 17 for SQL Server};SERVER=myserver.mydomain.com;PORT=1433;DATABASE=MyDatabase;Domain=MyCompanyDomain;Instance=MyInstance;UID=myDomainUser;PWD=XXXXXXXX;Trusted_Connection=yes;Integrated_Security=SSPI

应该使用“ Trusted_Connection”来使用Windows域身份验证,而不是直接通过SQL Server进行身份验证。

运行时出现的错误pyodbc.connect(connString)

pyodbc.Error: ('HY000', '[HY000] [unixODBC][Microsoft][ODBC Driver 17 for SQL Server]SSPI Provider: No Kerberos credentials available (851968) (SQLDriverConnect)')

我从其他来源了解到,此代码应在Windows上运行,因为此代码将使用当前登录用户的凭据。

我的问题是如何使用Windows域凭据从Linux连接到Windows SQL Server实例。

python sql linux windows pyodbc
3个回答
5
投票

我最终使用了pymssql库,该库基本上是FreeTDS驱动程序之上的pyodbc。它开箱即用。

很奇怪我很难找到这个库。


0
投票

通过Linux生成Windows身份验证很复杂。 EasySoftDB(商业)曾经能够处理此问题,而FreeTDS具有一些复杂的支持。

https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/using-integrated-authentication

我的建议是远离Windows身份验证,而使用SQL身份验证。确实没有安全性区别,只是您在连接字符串中提供了用户名和密码。但是,这会使您的生活更加轻松。


0
投票

我正在尝试做同样的事情,并且在阅读了OP的答案后,我测试了pymssql并注意到它仅适用于以下内容:

pymssql.connect(server='myserver', user='domain\username', password='password', database='mydb')

意识到这就是所有pymssql的需求后,我回到了pyodbc并使其能够使用:

pyodbc.connect("DRIVER={FreeTDS};SERVER=myserver;PORT=1433;DATABASE=mydb;UID=domain\username;PWD=password;TDS_Version=8.0")
© www.soinside.com 2019 - 2024. All rights reserved.