我正在尝试运行 odoo 项目
ubuntu: 22.04
pyodbc==4.0.28
python: 3.8
openssl version: OpenSSL 1.1.1p 21 Jun 2022
**ERROR: DIAG [08001] [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2746
DIAG [08001] [Microsoft][ODBC Driver 17 for SQL Server]Client unable to establish connection**
isql -v -k - With this command i connect to my the server and there is no problem
input > openssl version
output > OpenSSL 1.1.1p 21 Jun 2022
但是
input > sudo apt list --installed | grep openssl
output > libxmlsec1-openssl/jammy,now 1.2.33-1build2 amd64 [installed,automatic]
openssl/jammy-updates,jammy-security,now 3.0.2-0ubuntu1.17 amd64 [installed]
我更改了 openssl.cnf 文件并添加了一些新行(来自其他不起作用的解决方案)
**openssl_conf = default_conf
[ default_conf ]
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect
[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT:@SECLEVEL=1**
还尝试了 CipherString = DEFAULT:@SECLEVEL=0
遇到了“客户端无法建立连接”的错误,这在使用 pyodbc 连接 SQL Server 时很常见。虽然已经尝试了一些常见的解决方案,但问题依然存在。让我们来系统地排查一下:
1. 网络连接问题:
- 防火墙: 确保的 SQL Server 和 Ubuntu 服务器之间的防火墙没有阻止 SQL Server 默认端口 (1433) 上的连接。
- 远程连接: 确认 SQL Server 实例启用了远程连接。
- 网络可达性: 从 Ubuntu 服务器 ping SQL Server,确保网络连接正常。
-
端口监听:
在 SQL Server 上,使用
netstat -an | findstr "1433"
命令检查端口 1433 是否在监听。
2. 身份验证问题:
- 连接字符串: 仔细检查的 pyodbc 连接字符串,确保用户名、密码和数据库名称正确无误。
- SQL Server 身份验证: 确认使用的是正确的身份验证模式 (Windows 身份验证或 SQL Server 身份验证)。
3. OpenSSL 版本不匹配:
-
虽然检查了 OpenSSL 版本,但
isql
和pyodbc
可能使用不同的 OpenSSL 库。 -
尝试使用
ldd $(which isql)
和ldd $(which python)
命令查看它们分别链接到哪个 OpenSSL 库。 -
如果版本不一致,可能需要创建符号链接或调整环境变量,使
pyodbc
使用与isql
相同的 OpenSSL 库。
4. pyodbc 和 Driver 版本:
-
确保的
pyodbc
和 Microsoft ODBC Driver 17 for SQL Server 版本兼容。 - 可以在 https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/system-requirements-installation?view=sql-server-ver16 查看兼容性矩阵。
5. 驱动程序配置:
-
尝试在
/etc/odbc.ini
文件中添加以下配置: ```ini [ODBC Data Sources] your-dsn-name = Microsoft ODBC Driver 17 for SQL Server[your-dsn-name] Driver = /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.9.so.1.1 Server = your-sql-server-address Database = your-database-name UID = your-username PWD = your-password
`` * 将
your-dsn-name,
your-sql-server-address,
your-database-name,
your-username和
your-password` 替换为的实际值。
其他建议:
- 启用 SQL Server 和 ODBC 驱动程序的日志记录,以便更详细地了解错误原因。
-
尝试使用其他 Python SQL Server 连接库,例如
pymssql
,以排除pyodbc
本身的问题。
请提供以下信息,以便我更好地帮助:
- SQL Server 版本
- 完整的 pyodbc 连接字符串
- ODBC 驱动程序安装目录
- 更详细的错误日志 (SQL Server 和 ODBC 驱动程序)
通过仔细检查这些方面,应该能够找到导致“客户端无法建立连接”错误的根本原因并解决它。
标签:python,openssl,odbc,driver,odoo-11 From: 78833553