使用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
相关产品推荐
相关产品推荐

