Linux(Debian)环境下Python远程连接SQL Server失败求助
解决Debian下Python连接SQL Server的问题
针对pyodbc的Kerberos凭证错误
你的pyodbc连接字符串虽然设置了Trusted_Connection=no,但ODBC Driver 18 for SQL Server默认会优先尝试Kerberos认证,导致出现SSPI相关错误。可以通过以下方式修复:
明确指定认证方式为SQL密码登录
修改连接字符串,添加Authentication=SqlPassword参数,强制使用SQL Server账号密码认证:import pyodbc cnxn = pyodbc.connect('DRIVER={ODBC Driver 18 for SQL Server};' 'SERVER=192.168.108.186,1433;' # 端口直接跟在服务器地址后用逗号分隔,避免PORT参数可能的冲突 'DATABASE=teste;' 'UID=username;' 'PWD=my_password;' 'Trusted_Connection=no;' 'TrustServerCertificate=yes;' 'Authentication=SqlPassword') cursor = cnxn.cursor()验证ODBC驱动安装完整性
确保Debian上已正确安装ODBC Driver 18:# 导入微软源 curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list apt-get update ACCEPT_EULA=Y apt-get install -y msodbcsql18
针对pymssql的连接失败问题
pymssql依赖FreeTDS库,连接失败通常是FreeTDS配置不正确导致的:
安装并配置FreeTDS
先安装FreeTDS:apt-get install -y freetds-dev freetds-bin编辑
/etc/freetds/freetds.conf,添加或修改以下配置:[sqlserver] host = 192.168.108.186 port = 1433 tds version = 7.4 # 匹配SQL Server版本,SQL Server 2016+建议用7.4 client charset = UTF-8修改pymssql连接代码
可以使用配置好的别名,或者直接指定TDS版本:import pymssql # 方式1:使用freetds.conf中的别名 conn = pymssql.connect(server='sqlserver', user='username', password='my_password', database='teste') # 方式2:直接指定TDS版本 conn = pymssql.connect( server='192.168.108.186', user='username', password='my_password', database='teste', tds_version='7.4' )
通用排查步骤
- 网络连通性检查:在Debian机器上执行
telnet 192.168.108.186 1433或nc -zv 192.168.108.186 1433,确认端口是否开放。 - SQL Server配置检查:确保SQL Server允许远程连接,启用了SQL Server身份认证,且指定的账号有访问
teste数据库的权限。 - 防火墙规则检查:检查Debian本地防火墙和SQL Server所在机器的防火墙,是否允许1433端口的双向流量。
内容的提问来源于stack exchange,提问作者khelili miliana
相关产品推荐
相关产品推荐

