pyodbc使用可信连接登录SQL Server失败,SSMS Windows认证可正常登录
故障原因与解决方案
核心原因
该报错本质是运行Python脚本的Windows身份上下文与SSMS登录所用的身份不一致,具体原因和对应解决方法如下:
- 身份不匹配:SSMS启动时使用的是有权限访问SQL Server和目标数据库的Windows账户,而运行Python脚本的IDE/终端是用MicrosoftAccount前缀的微软账户启动的,该账户未在SQL Server中配置登录权限,也没有目标数据库的访问权限,所以同时触发18456(登录失败)和4060(数据库打开失败)报错。
- 数据库名解析问题:目标数据库名包含空格和特殊字符,部分ODBC驱动版本会出现解析异常。
解决步骤
- 优先验证身份上下文:右键点击所用的终端/IDE,选择「以其他用户身份运行」,使用SSMS登录时的同一Windows账户启动,再执行脚本验证是否可以正常连接。
- 强制指定认证账户:如果无法切换启动身份,可在连接字符串中补充对应Windows账户的账号密码,修改后的连接串参考:
cnxn_str = ( r'DRIVER=ODBC Driver 17 for SQL Server;' r'SERVER=.\SQLEXPRESS02;' r'Trusted_Connection=yes;' r'UID=你的Windows账户名;' r'PWD=你的Windows账户密码;' r'DATABASE=[Scenario2025Max_Release 5.0_0523586A6813B825D031545D6E25A815];' )
- 检查SQL Server权限配置:在SSMS的「安全性-登录名」节点下,确认MicrosoftAccount前缀的对应微软账户是否已添加,且已授予目标数据库的访问权限。
内容的提问来源于stack exchange,提问作者Rohan Bapat
相关产品推荐
相关产品推荐

