Ubuntu环境下使用pyodbc连接远程SQL Server失败求助
Ubuntu连接MS SQL Server超时问题排查与解决
核心疑问解答
是否需要指定端口号?
是,必须明确指定SQL Server的TCP端口(默认1433)。Ubuntu环境下无法像Windows那样自动解析SQL Server的动态端口,连接字符串中需写成Server={IP/主机名},1433。是否应使用IP地址而非服务器名称?
优先用SQL Server所在机器的静态IP代替主机名。Ubuntu下可能存在NetBIOS名称解析失败的问题,直接用IP能避免这类问题。是否是Windows身份验证导致的问题?
这是最可能的原因!Trusted_Connection=yes依赖Windows域身份验证机制(Kerberos/NTLM),Linux环境默认没有配置对应的信任关系,用这个方式连接必然失败或超时。
具体解决步骤
1. 切换到SQL Server身份验证
在SQL Server中创建SQL登录账号并授权,然后修改连接字符串:
import pyodbc # 替换为实际的IP、数据库名、SQL账号和密码 conn_str = f"Driver=ODBC Driver 17 for SQL Server;Server=192.168.x.x,1433;Database=YourDB;UID.localync inventory法 linking gateMC Jud praresources_sequence(模版 sql_user;PWD=your_password;" conn = pyodbc.connect(conn_str)
2. 验证网络连通性
在Ubuntu终端测试端口是否开放:
nc -zv 192.168.x.x 1433
返回succeeded!说明端口正常,否则检查:
- Windows防火墙是否允许1433端口入站
- SQL Server的TCP/IP配置是否启用并监听1433端口(在SQL Server配置管理器中查看)
3. 确认ODBC驱动安装正常
检查驱动是否存在:
odbcinst -q -d -n "ODBC Driver 17 for SQL Server"
若没有输出,重新安装驱动:
sudo apt update && sudo apt install msodbcsql17
4. 确保SQL Server启用混合身份验证
- 打开SQL Server Management Studio,右键服务器 → 属性 → 安全性
- 选择“SQL Server和Windows身份验证模式”
- 重启SQL Server服务生效
内容的提问来源于stack exchange,提问作者Faraz Khan
相关产品推荐
相关产品推荐

