You need to enable JavaScript to run this app. 使用Python的pyodbc连接SQL Server时空用户登录失败报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用Python的pyodbc连接SQL Server时空用户登录失败报错如何解决

报错核心定位

你遇到的报错来自两个叠加的问题:

  1. 连接字符串存在SQL Server Native Client 11.0无法识别的无效属性,被驱动静默丢弃
  2. 因为账号相关配置被丢弃,驱动最终以空用户身份尝试登录SQL Server,触发18456登录失败错误
分步解决操作
  • 修正连接字符串的参数命名,适配驱动的解析规则:
    • 原写法的username=fred不是驱动认可的有效键名,需替换为UID=fred(或等价写法*User ID=fred*)
    • 原写法的password=test不是驱动认可的有效键名,需替换为PWD=test(或等价写法*Password=test*)
    • 移除冗余的冲突配置:Trusted_Connection=no和Integrated security=false功能完全等价,同时存在容易触发解析异常,保留Trusted_Connection=no即可
  • 替换为修正后的连接代码:
conn = pyodbc.connect(
    r'Driver={SQL Server Native Client 11.0};'    
    r'Server=12345.dcd_ba.weatherton.com;'
    r'Database=Dentrix;'
    r'Trusted_Connection=no;'
    r'UID=fred;'
    r'PWD=test;'
)
return conn
  • 修正参数后如果仍存在登录失败问题,按顺序排查:
    • 确认SQL Server实例开启了SQL Server身份验证模式(不是仅Windows身份验证模式),fred是该模式下创建的合法账号,未被锁定、未触发过期策略
    • 确认fred账号拥有Dentrix数据库的连接与访问权限
    • 确认网络层可正常连通数据库服务器:测试服务器地址的1433端口是否可达,未被防火墙拦截
    • 如驱动兼容性问题依旧存在,可将驱动替换为当前维护状态的ODBC Driver 17 for SQL Server,连接字符串参数规则完全一致

SQL Server系列ODBC驱动的解析特性为:遇到无法识别的连接字符串参数时,不会直接中断连接流程,只会将无效参数静默剔除,最终基于剩余的有效配置发起连接。这也是为什么你明明写了账号密码,却看到报错里的登录用户是空字符串的核心原因。


内容的提问来源于stack exchange,提问作者Ace Cabbie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 17:36:05