我从不在论坛上提问题,因为我通常可以在互联网上找到答案。
但是,在这种情况下,我不能。
摘要:我可以通过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
领域=域
我避免在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
祝你好运!