navicat从15版起彻底移除windows身份验证(sspi)支持,勾选该选项会以空用户名密码尝试sql server认证而必然失败;必须改用sql server身份验证,并确保tcp/ip已启用、端口放行、连接字符串符合“主机,端口”格式。

Navicat不支持Windows身份验证(SSPI)协议
Navicat从15版起彻底移除了对Windows身份验证(即SSPI/Kerberos/NTLM)的支持,连接SQL Server时若选择“Windows身份验证”选项,实际会尝试用空用户名+空密码走SQL Server认证流程,必然失败。这不是配置问题,而是客户端能力缺失——它压根没实现SSPI握手逻辑。
常见错误现象包括:SQL Server Network Interfaces: 为验证提供的消息顺序不对、Login failed for user ''、或直接卡在连接中无响应。这些都不是服务端问题,而是Navicat发出了非法认证请求。
实操建议:
在 Windows 11 上"直接发声"的 TTS(从 WSL2/TUI 调用 powershell.exe + System.Speech)。适用于用户说"说出来/读出来/语音播报/用TTS",或反馈"没声音/tts 生成的 mp3 是空的/播不出来",以及需要中文语音但 OpenClaw 内置 tts 不可用时。
- 放弃在Navicat里勾选“Windows身份验证”,该选项形同虚设
- 改用SQL Server身份验证方式(即用户名+密码),并确保sa或自建账户已启用且有权限
- 如必须用Windows凭据登录,换用SSMS、Azure Data Studio或DBeaver(需装mssql-jdbc驱动)
SQL Server未启用TCP/IP协议导致Windows验证伪失败
即使你绕过Navicat的限制、改用其他工具尝试Windows身份验证,仍可能报错“服务器不存在或拒绝访问”。此时不是身份验证失败,而是底层连不上——因为SQL Server默认安装常禁用TCP/IP协议,只留共享内存(lpc:)和命名管道(np:),而多数第三方工具(包括旧版Navicat残留逻辑)依赖TCP建立初始连接。
检查方法:运行 sqlcmd -S .SQLEXPRESS -E(-E 表示Windows认证)。若提示 Named Pipes Provider: Could not open a connection...,基本可锁定是网络协议问题。
实操建议:
- 打开
SQL Server Configuration Manager - 展开“SQL Server网络配置” → 选对应实例(如
SQL Server (SQLEXPRESS))→ 右键TCP/IP→ 启用 - 双击TCP/IP → “IP地址”页 → 拉到最下方
IPAll→ 清空TCP Dynamic Ports,填入TCP Port为1433(或自定义固定端口) - 重启对应SQL Server服务(不是SQL Server Agent)
Windows防火墙拦截了本地回环TCP连接
启用TCP/IP后仍连不上?别急着怀疑域策略。Windows防火墙默认会拦截所有入站TCP连接,哪怕目标是 127.0.0.1 或 localhost。尤其当你用非默认端口(比如 1434)或命名实例(如 .\SQLEXPRESS)时,SQL Server Browser服务若未启动,客户端会尝试连动态端口,而防火墙规则没覆盖,就表现为“拒绝访问”。
验证方式:命令行执行 telnet 127.0.0.1 1433。若提示“无法打开到主机的连接”,说明端口不通——90%是防火墙挡的。
实操建议:
- 进“Windows Defender 防火墙” → “高级设置” → “入站规则” → 新建规则 → 类型选“端口” → TCP、特定端口填
1433 - 操作选“允许连接”,配置文件至少勾选“专用”(局域网/本机测试场景)
- 若用命名实例且未固定端口,还需手动启动
SQL Server Browser服务,并放行UDP 1434端口
连接字符串里混用主机名与实例名格式
很多人以为写 localhostSQLEXPRESS 就能触发Windows身份验证,其实这是误解。SQL Server实例名语法(分隔)仅在使用共享内存或命名管道时有效;一旦走TCP,Navicat会把整个字符串当主机名解析,结果去连一个叫 localhostSQLEXPRESS 的DNS主机——显然不存在。
正确做法是分离协议要素:TCP连接必须用 主机,端口 格式(逗号分隔),实例名只用于命名管道或SSMS里的“服务器名称”字段。
实操建议:
- 命名实例(如SQLEXPRESS)在Navicat中应填:
localhost,1433(前提是已设固定端口)或127.0.0.1,1433 - 若坚持用实例名,必须关闭TCP/IP,改用命名管道,且Navicat需支持(实际不支持)→ 此路不通
- 检查SQL Server日志里是否有
Error: 26(定位服务器失败)或Error: 40(无法打开连接),它们比登录错误更早出现,是真正的拦路虎










