我正在尝试使用 Python 3 中的 pyodbc 连接到 SQL Server 数据库。但是当我尝试建立连接时出现错误。
我做了这样的事情:
import pyodbc
conn = pyodbc.connect('Driver={ODBC Driver 18 for SQL Server};Server=192.168.2.250;Database=DB;UID=username;PWD=password;')
我得到了:| ||有人知道如何解决这个问题吗?该数据库不是我自己的,所以我希望有一个不需要更改任何设置的解决方案。
OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol][error:140B40C7:SSL routines:SSL_do_handshake:peer did not return a certificate] (-1) (SQLDriverConnect)')
我在 Linux 的 Windows 子系统中运行 Ubuntu。
I'm running Ubuntu within the Windows Subsystem for Linux.
该错误信息表明的 Python 客户端和 SQL Server 之间存在 SSL/TLS 握手问题。具体来说,的 SQL Server 配置为仅接受 TLS 连接,而的 Python 客户端尝试以不支持或被服务器阻止的协议版本进行连接。
可以尝试以下几种解决方案:
1. 强制使用特定版本的 TLS
pyodbc 不直接控制 TLS 版本。可以使用环境变量在系统级别对其进行设置。
对于 OpenSSL 1.0.1 及更高版本:
export SSL_PROTOCOL=TLSv1.2
对于 OpenSSL 1.1.1 及更高版本:
export SSL_PROTOCOL_TLSv1_2=on
在设置环境变量后,请尝试再次运行 Python 脚本。
注意: 使用特定版本的 TLS 可能会带来安全风险,如果服务器配置为使用更强大的协议,则不应这样做。
2. 验证 SQL Server 配置
确保的 SQL Server 实例配置为接受来自的客户端的 TLS 连接。可能需要咨询数据库管理员以获取以下信息:
- SQL Server 是否配置为强制使用 TLS?
- 支持哪些 TLS 版本?
- 是否需要特定的加密套件?
3. 更新驱动程序和库
确保使用的是最新版本的 pyodbc 和 OpenSSL 库。旧版本可能不支持服务器所需的 TLS 版本或加密套件。可以使用以下命令更新它们:
pip install --upgrade pyodbc
sudo apt-get update
sudo apt-get install --reinstall libssl-dev
4. 禁用加密(不推荐)
警告: 禁用加密将使的连接容易受到中间人攻击。仅当位于受信任的网络上并且了解相关风险时,才应将其用作 最后的手段 。
要禁用加密,请在连接字符串中添加
Encrypt=No
参数:
conn = pyodbc.connect('Driver={ODBC Driver 18 for SQL Server};Server=192.168.2.250;Database=DB;UID=username;PWD=password;Encrypt=No;')
再次提醒,仅当完全了解安全隐患时,才应将此方法用作最后的手段。
如果在尝试了上述步骤后仍然遇到问题,请提供有关 SQL Server 版本、操作系统版本以及在服务器或客户端上可能拥有的任何其他相关配置的更多信息,以便我可以帮助进一步解决问题。
标签:python,sql-server,odbc,pyodbc From: 71587239