如何在 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在插入时出现乱码

Heroku 部署和 pyodbc

在 Windows 上使用 pyodbc 连接到 Informix

pyodbc的驱动程序:如何在macOS中指定其位置?

如何解决 Ubuntu 20.04 上 pyodbc 的安装错误?