使用Windows域账号密码配置SQL Server连接字符串登录失败
连接失败原因及修正方案
核心问题是Windows认证模式的连接字符串配置逻辑写错了,按实际需求选对应方案调整即可:
- 优先方案:和SSMS一样用当前登录Windows的域账号身份连接
这种场景完全不需要在配置里写用户名密码,直接删掉User Id、Password两个参数,加上集成认证声明就行,修正后连接字符串:
只要启动应用的Windows账号就是平时打开SSMS用的域账号,这个配置直接就能连通。要注意:如果开启了Server=Server\\Instance;Initial Catalog=TheDb;Trusted_Connection=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;MultipleActiveResultSets=trueTrusted_Connection=True(等价于Integrated Security=True),手动写的User Id和Password会被SQL客户端直接忽略,根本不会生效。 - 特殊方案:必须在配置里硬编码指定其他域账号的账号密码连接(不推荐,明文存密码有安全风险)
首先要把项目里的SQL客户端驱动换成新版Microsoft.Data.SqlClient,老版本的System.Data.SqlClient不支持在连接字符串里手动传入Windows账号密码,会默认读取当前进程的身份登录,必然报错。之后改两处配置:- 显式加
Integrated Security=False,关闭自动继承当前进程身份的逻辑 - 把原来
MyDomain\\MyLogin的账号格式改成UPN格式MyLogin@MyDomain,不要用反斜杠分隔域和账号
参考配置:
Server=Server\\Instance;Integrated Security=False;User Id=MyLogin@MyDomain;Password=MyPassword;Initial Catalog=TheDb;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;MultipleActiveResultSets=true - 显式加
补充:原配置里的双反斜杠转义、连接超时、加密开关、多结果集这些参数的写法都是正确的,无需调整。
内容的提问来源于stack exchange,提问作者Ed Williams
相关产品推荐
相关产品推荐

