如何在 Linux 上使用 pyodbc 对 Active Directory 帐户使用用户/密码身份验证
Posted
技术标签:
【中文标题】如何在 Linux 上使用 pyodbc 对 Active Directory 帐户使用用户/密码身份验证【英文标题】:How to use user / password auth for Active Directory account with pyodbc on linux 【发布时间】:2019-11-01 07:06:28 【问题描述】:我必须在 linux 上使用 pyodbc 连接到 SQL Server。该帐户是 Active Directory 帐户。使用 pymssql,我可以通过指定corp\svc_account
进行连接。但是在pyodbc上,连接失败了。
使用 pyodbc 似乎我们只能使用受信任的连接或用户/密码。并且用户/密码仅适用于 SQL Server 身份验证 - 不适用于 Active Directory。
但是使用 pymssql 似乎我们可以使用带有用户/密码的 Active Directory 身份验证进行连接。
有什么方法可以将我的 Active Directory 凭据与 pyodbc 一起使用?
我也不想安装 kerberos 客户端。
【问题讨论】:
你试过this Stack Overflow answer吗? 如果您想“使用我的 Active Directory 凭据”,为什么不能只使用Trusted_Connection=yes
?
@GordThompson Trusted_connection 仅在您已通过 kerberos 进行身份验证时才有效。我不能使用 kerberos。
如果域有 Kerberos,我认为您无法使用 AD 凭据进行连接,因为我想是直接尝试连接而不是 kerberos 票证。请参阅FAQ pymssql,其中提到了 kerberos 和模块编译。
我从对您的问题的编辑中看到您正在尝试从 Linux 连接。在这种情况下,您可能需要使用 FreeTDS 进行连接,通过 pyodbc + FreeTDS ODBC 或通过 pymssql。
【参考方案1】:
您需要设置 PYODBC 以使用 FreeTDS 驱动程序而不是 microsoft odbc 驱动程序,并且您必须确保为您的连接指定所有正确的参数。
让 FreeTDS 与 pyodbc 一起工作可能有点令人困惑和棘手。
确保您已安装 FreeTDS。
找到您的 odbc 驱动程序配置文件 (odbcinst.ini
)。
❯ odbcinst -j
unixODBC 2.3.7
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /Users/<user>/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
在我的例子中,文件位于/usr/local/etc/odbcinst.ini
。
-
确保您的驱动程序配置文件包含 FreeTDS 驱动程序的条目。
就我而言,在 Mac 上,我的 odbcinst.ini
有这个条目:
[FreeTDS]
Description=TD Driver (MSSQL)
Driver=/usr/local/lib/libtdsodbc.so
Setup=/usr/local/lib/libtdsodbc.so
FileUsage=1
当您在 pyodbc 中指定 driver
时,这是它查找的文件。
-
现在它应该可以工作了。
import pyodbc
cnx = pyodbc.connect(
server="myserver.com",
database="mydb",
user="domain\user",
password="mypassword",
port="1433",
driver='FreeTDS',
TDS_Version='7.4',
)
一些注意事项:
使用 Active Directory 帐户,请确保在 user
字段中指定域。
TDS_Version
之类的参数在 odbcinst.ini
中不受尊重。所以如果遇到[FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)
之类的错误,可能需要在connect
中指定TDS_Version
。
【讨论】:
以上是关于如何在 Linux 上使用 pyodbc 对 Active Directory 帐户使用用户/密码身份验证的主要内容,如果未能解决你的问题,请参考以下文章
linux使用pyodbc和freetds连接sqlserver
Linux上的pyodbc fast_executemany在插入时出现乱码