You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pyodbc连接带自签名证书的SQL Server时遇连接错误求助

解决pyodbc连接自签名证书SQL Server的问题

问题排查与解决方案

1. 核心错误分析

你遇到的第二个错误Login failed for user '',本质是连接字符串参数解析异常,导致用户名未被驱动正确识别,而非证书信任问题本身。结合你的尝试,问题出在连接字符串的格式或参数写法上。

2. 正确的连接字符串写法

推荐使用ODBC标准缩写参数(UID代替User Id,PWD代替Password),同时避免末尾多余分号,确保驱动能正确解析所有参数:

import pyodbc

# 直接在连接字符串中指定加密和信任证书参数
cnxn = pyodbc.connect(
    "Driver={ODBC Driver 18 for SQL Server};"
    "Server=192.168.0.1;"
    "Database=Db;"
    "UID=Too;"
    "PWD=Easy;"
    "Encrypt=yes;"
    "TrustServerCertificate=yes"
)

3. 使用attrs_before的正确写法

如果要通过属性参数设置,需确保连接字符串末尾无多余分号,同时使用正确的ODBC选项常量:

import pyodbc

# ODBC驱动标准常量值
SQL_COPT_SS_ENCRYPT = 1223
SQL_ENCRYPT_ON = 1  # 对应Encrypt=yes
SQL_COPT_SS_TRUST_SERVER_CERTIFICATE = 1228
SQL_TRUST_SERVER_CERT_YES = 1

cnxn = pyodbc.connect(
    "Driver={ODBC Driver 18 for SQL Server};"
    "Server=192.168.0.1;"
    "Database=Db;"
    "UID=Too;"
    "PWD=Easy",
    attrs_before={
        SQL_COPT_SS_ENCRYPT: SQL_ENCRYPT_ON,
        SQL_COPT_SS_TRUST_SERVER_CERTIFICATE: SQL_TRUST_SERVER_CERT_YES
    }
)

4. 额外配置检查

  • 确认SQL Server启用了SQL身份验证(而非仅Windows身份验证);
  • 验证用户Too拥有目标数据库Db的访问权限,且密码正确;
  • 如果SQL Server未使用默认1433端口,需在Server参数后添加端口,格式为Server=192.168.0.1,端口号。

内容的提问来源于stack exchange,提问作者Neil P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:25:17