SSMS连接SQL Server Express报18456 同配置Python可正常连接
问题根因
这是SSMS的内置解析逻辑问题,和服务端配置无关:
- Python脚本可正常连接,已经证明服务端身份验证模式、账号密码、1433端口连通性全部正常
- SSMS有个默认逻辑:只要你在用户名输入框里填了带
\的内容,哪怕你手动选了「SQL Server 身份验证」,它也会强行把\前面的内容识别为域名,按Windows域账号的逻辑做认证,不会把你输入的完整带前缀的用户名传给SQL Server服务端做SQL认证校验,最终触发Error 18456 Severity 14 State 1的登录失败错误。你之前手动改连接地址为tcp格式没用,因为问题根本不在网络层。
解决方法
选任意一种操作即可:
方案1:加前缀绕过SSMS的自动解析
- 打开SSMS连接窗口,身份验证正常选「SQL Server 身份验证」
- 用户名不要直接填
mydomain\myuser,改成输入.\mydomain\myuser - 正常输入密码,点击连接即可
前缀的
.\会明确告诉SSMS这是SQL实例内的认证账号,不要触发域账号自动解析逻辑,服务端就能收到完整的用户名做校验。
方案2:通过附加参数直接传账号信息
- 打开SSMS连接窗口,点击底部的「选项 >>」,切换到「附加连接参数」标签页
- 在参数框里填入以下内容,替换成你自己的密码:
UID=mydomain\myuser; PWD=你对应的账号密码;
- 切回登录标签页,服务器名填
myserver.example.de,1433,身份验证选「SQL Server 身份验证」,用户名输入框留空也不影响,直接点连接即可。
方案3:匹配账号类型选对认证模式
如果你的mydomain\myuser本身就是AD域账号,不是在SQL Server里手动创建的SQL认证账号,根本不需要选SQL Server身份验证:
- 身份验证直接选「Windows 身份验证」
- 如果当前系统登录的账号不是这个域账号,点用户名输入框旁的「其他账户」选项,手动输入
mydomain\myuser和对应密码再连接即可。
内容的提问来源于stack exchange,提问作者emmwie
相关产品推荐
相关产品推荐

