提问者:小点点

在macOS上使用pyodbc、FreeTDS和Kerberos身份验证连接到SQL Server


我从不在论坛上提问题,因为我通常可以在互联网上找到答案。
但是,在这种情况下,我不能。

摘要:我可以通过Azure Data Studio和使用FreetDS的tsql使用kerberos身份验证连接和查询数据库。我无法连接到PyODBC。我尝试了几十种不同的配置都没有成功。

我的最终目标是用Python连接到MSSQL server DB。

谢谢你的任何投入。

背景

连接到kerberos身份验证所需VPN的本地计算机macOS 10.15.4已成功从Azure Data Studio数据库查询到数据库是Microsoft SQL Server 2016

弗里特兹

tsql-s-u'directory\username'->工作,可以查询DB

iSQL

isql dsn_name'directory\username''password'

错误DIAG[42000][FreeTDS][SQL Server]登录失败。该登录名来自不受信任的域,不能与Windows身份验证一起使用。

isql dsn_name'directory\username'

错误:DIAG[42000][FreeTDS][SQL Server]登录失败。该登录名来自不受信任的域,不能与Windows身份验证一起使用。

PyODBC

cnxn=pyodbc.connect('dsn=dsn_name;trusted_connection=yes')

错误:Pyodbc.ProgrammingError:(“42000”,“[42000][FreeTDS][SQL Server]登录失败.该登录来自不受信任得域,不能与Windows身份验证一起使用.(18452)(SQLDriverConnect)”)

cnxn=pyodbc.connect('dsn=dsn_name;uid=directory\username;pwd=“password”')

错误:DIAG[01000][FreeTDS][SQL Server]Adaptive Server连接Pyodbc失败。OperationalError:(“08001”,“[08001][FreeTDS][SQL Server]无法连接到数据源(0)(SQLDriverConnect)”)

配置

krb5.conf

libdefaults

default_realm=域

“境界”

domain_same_as_default={

kdc=kdc_address

}

ODBC.INI

[dsn_name]

描述=MSSQL服务器

驱动器=FreeTDS

Servername=server_name

ODBCInst.ini

[FreeTDS]

description=freetds用于Linux和MSSQL的驱动程序

driver=/usr/local/lib/libtdsodbc.so

setup=/usr/local/lib/libtdsodbc.so

USAGECOUNT=1

[ODBC]跟踪=是

tracefile=/dev/stdout

freetds.conf

[server_name]主机=ip_address

port=port_num

数据库=db_name

领域=域


共1个答案

匿名用户

我避免在pyodbc中使用DSN,因为我更喜欢将所有配置放在一个位置。下面是我在域中使用的连接字符串示例。

con = pyodbc.connect(
    r"DRIVER={FreeTDS};"
    r'SERVER=mssql.mydomain.com;'
    r"PORT=1433;"
    r"DATABASE=my_db;"
    f"UID=MYDOMAIN\\my_username;"
    f"PWD=my_password;"
    r"TDS_Version=7.3;"
    r"Encrypt=yes;"
    r"Trusted_Connection=yes;"
)

给它一个回旋?如果使用Windows域身份验证,则需要两个反斜杠(\\)进行转义,这不是一个输入错误。您可能缺少的关键内容是tds_version。有关TDS版本的更多信息,请访问:https://www.freetds.org/userguide/choosingtdsprotocol.html

祝你好运!