远程登录被拒「登录失败」怎么排查?
远程连接 SQL Server 报登录失败时的分层排查:先分清网络层还是认证层,再查认证模式、账户远程权限、防火墙。
简短答案
「远程登录失败」要先分层:网络层(连不上,报「无法打开/找不到路径」类)与认证层(连上了但拒绝,报 18456 类)是两回事。认证层被拒的三大嫌疑:实例没开混合认证、该账户没在目标库有映射、域账户权限跨机失效。
现象对照
| 报错形态 | 层 | 方向 |
|---|---|---|
| 无法打开服务器/找不到路径 | 网络层 | TCP/IP、防火墙、Browser |
| 18456 类登录失败(远程) | 认证层 | 认证模式、账户映射 |
| Windows 集成认证远程失败 | 认证层 | 见「集成身份验证不受支持」的排查 |
| 本机行、远程报 sa 失败 | 认证层 | 账户是否被禁用/锁定 |
排查步骤(认证层)
- 确认目标实例是混合认证:纯 Windows 模式下 SQL 登录(含 sa)远程必失败,切混合后重启服务。
- 用 Windows 认证登进去查账户:
SELECT name, is_disabled, is_login_only FROM sys.server_principals;
禁用/锁定就启用解锁。
3. 账户能登录但进不了目标库:该登录没有数据库用户映射,建用户并授权。
4. 远程 Windows 集成认证失败:核对机器名/域可达性、Kerberos 相关前提;跨子网场景参考 SQL Server 2022 Developer、SQL Server 2019 Developer 条目页说明。
5. 网络层先跑 Test-NetConnection 服务器 -Port 1433,通才谈认证;用 SSMS 逐步验证。
远程排障的黄金顺序:TCP 通不通 → 认证模式对不对 → 账户状态 → 库映射,跳步容易在服务端绕圈子。
操作小结
- 先分清网络层还是认证层,再选排查线。
- 远程 SQL 登录前提:混合认证 + 账户有效 + 库映射。
- 每步在 SSMS 里实连验证到成功。