FEATURED · 精选文章

SQL Server连接失败排查:从错误码、端口到防火墙的完整思路

发布时间 / 2026/9/15 16:05:54
来源 / 创域科博编辑部
栏目 / 资讯中心
SQL Server连接失败排查:从错误码、端口到防火墙的完整思路 用SSMS连接SQL Server时弹出“无法连接到服务器”这应该是我这几年被问到的频率最高的问题没有“之一”也可以。很多朋友第一次遇到时以为自己服务器装坏了或者密码记错了其实密码错的话报错文案会完全不同。报“无法连接到服务器”说明连接请求在“建立连接”这个环节就失败了大概率不是账户问题而是网络链路、服务状态、协议或防火墙等环节出了问题。这篇文章把我平时排查这个问题的完整思路写出来从“一次连接到底经历了什么”讲起再到服务、协议、端口、防火墙、实例名、认证模式逐层排查最后附上常见的错误码速查表。无论你是刚接触SQL Server的小白还是被这个报错反复折腾过的开发和运维按这个顺序走一遍大多数情况下都能自己把问题解决掉。1. 先定位一次连接请求到底死在哪个环节先说结论这个报错本身说明的是客户端把请求发出去之后没有得到预期的响应。要定位问题首先得知道一次SSMS连接请求会经历哪些步骤否则很容易在错误的方向上浪费时间。1.1 连接请求的完整路径当你在SSMS的“服务器名称”框里输入类似192.168.1.100\SQL2022这样的实例名点击连接后客户端会大致做这么几件事解析你输入的服务器名或实例名。如果输入的是主机名会先通过DNS或本地hosts把它解析成IP地址如果输入的是IP就跳过这一步如果还带实例名客户端需要向目标机器的SQL Server Browser服务询问该实例对应的动态端口。根据解析结果向目标IP的特定端口发起TCP连接。默认实例通常是1433端口命名实例则可能是动态端口需要Browser服务来告知具体端口。TCP连接建立之后双方开始TDS握手协商协议版本和加密方式。握手完成后客户端提交SQL Server登录凭据服务器验证用户名和密码然后返回“连接成功”或“登录失败”。这四步环环相扣任何一步出问题SSMS都会弹出“无法连接到服务器”。好消息是SQL Server通常会在错误信息末尾带一个错误码这个错误码可以帮我们快速确定是哪一步挂了。1.2 错误码就是故障定位器错误码含义对应环节Error 2系统找不到指定的文件名称解析阶段主机名或实例名解析失败Error 26定位指定的服务器或实例时出错实例解析失败SQL Browser未启动或TCP/IP协议被禁用Error 40无法打开到SQL Server的连接TCP连接建立失败可能是端口不通或协议禁用Error 53找不到网络路径网络路径问题主机名解析失败或防火墙阻止Error 10060连接超时数据包被防火墙丢弃或跨网段路由不可达Error 10061由于目标计算机积极拒绝无法连接服务没监听这个端口或被本机策略拒绝Error 18456登录失败第四步认证阶段网络线已通但账号密码或权限不对10061和10060的区别要记住一个是被拒绝一个是被丢弃。被拒绝说明数据包到了目标机器但那个端口上没人监听或者被安全策略主动挡掉被丢弃则说明链路根本不通多半是防火墙或路由的问题。1.3 推荐的排查顺序我的习惯是从服务器本机向外部一层一层剥而不是一上来就在客户端折腾服务器本机能不能用SSMS或sqlcmd登录先把服务和认证问题排除掉。确认SQL Server服务是否在运行。确认TCP/IP协议是否启用。确认端口是否正确。确认防火墙和云安全组是否放行。确认实例名和端口写法是否正确。确认客户端的SSMS版本是否太旧。如果本机都连不上就不要去看防火墙如果本机能连、远程连不上重点看协议、端口和防火墙。这个方法基本不会跑偏。2. 服务、协议、端口把SQL Server自己先查干净2.1 服务没起来一切白搭很多“无法连接到服务器”其实是SQL Server服务本身没启动。用Windows服务管理器直接看最简单按WinR输入services.msc找名称类似SQL Server (MSSQLSERVER)或SQL Server (SQL2022)的服务看它的状态是不是“正在运行”。如果是停止的手动启动如果启动失败事件查看器里的Windows日志和SQL Server错误日志都会记录原因。常见原因是磁盘权限、文件损坏或服务启动账号密码过期。还可以用PowerShell快速查看Get-Service MSSQLSERVER如果一台机器装了多个实例就逐个查。这里有个容易忽略的细节服务启动账号如果是域账号这个账号过期或密码改了会导致服务重启后起不来。所以如果你的服务器重启完就出现连不上的问题先去服务管理器看一眼状态别急着怀疑防火墙。2.2 TCP/IP协议被禁用远程连接直接失败默认情况下SQL Server安装时如果不特别设置TCP/IP协议可能是禁用的。尤其在一些安装教程里为了让界面“看起来简洁”而手动禁用协议结果就是同一台机器用Shared Memory连没问题但远程连怎么都连不上。打开SQL Server配置管理器方式很简单开始菜单直接搜“SQL Server 配置管理器”或者用命令SQLServerManager16.msc对应SQL Server 20222019是152017是14版本不同文件后缀不同。进入“SQL Server 网络配置”选中当前实例右侧会看到Shared Memory、Named Pipes、TCP/IP三种协议把TCP/IP右键启用即可。改完必须重启SQL Server服务配置才会生效。这一点我要专门说下网上不少教程只让你勾选却忘记提醒重启服务。有人改完马上连接还是报错就以为没生效。实际上只要配置文件改动过SQL Server服务的重启就是必须的这个坑我踩过不止一次。2.3 端口动态还是固定直接影响连接方式在TCP/IP协议属性里切到“IP地址”选项卡看最底下的IPAll这里会显示TCP端口和TCP动态端口。默认实例一般会有一个固定端口1433命名实例往往使用动态端口动态端口会在每次服务重启时变化客户端要连接就必须借助SQL Server Browser服务来查询。如果你连的是命名实例又不想依赖Browser建议手动设置一个固定端口。在IPAll的“TCP端口”填一个比如14333把“TCP动态端口”留空重启服务。之后客户端就可以用主机名,14333这种带逗号的方式连接直接绕开Browser也更适合写进连接字符串。设置完成后再用下面命令确认服务是否真的在监听netstat -ano | findstr 14333如果能看到LISTENING状态说明端口已经正常监听如果什么都搜不到说明服务没起来或者配置没生效。3. 防火墙、实例名与认证远程连不上的三大元凶3.1 防火墙和云安全组的入站放行SQL Server服务和端口一切正常远程还是连不上十有八九是防火墙拦了。数据库服务器在Windows Server上最常见的就是Windows Defender防火墙默认只放行了系统自带规则没有放行SQL Server端口。手动添加规则的命令如下管理员身份打开命令提示符执行netsh advfirewall firewall add rule nameSQL Server TCP 1433 dirin actionallow protocolTCP localport1433如果是命名实例且走了Browser服务还需要放行UDP 1434netsh advfirewall firewall add rule nameSQL Server Browser UDP 1434 dirin actionallow protocolUDP localport1434注意如果SQL Server实例用的不是1433而是自定义端口请务必把命令里的端口号换成实际端口。还有如果服务器在云环境下除了系统防火墙云平台的安全组也必须放行对应端口。我见过不少情况是系统防火墙关了但安全组没放行依然连不上。关防火墙图省事的方式我也不推荐放行端口就行没必要把整面墙拆掉。3.2 验证链路通不通的两种命令排查端口通不通不要去猜直接测。命令行输入telnet 192.168.1.100 1433如果黑窗口消失变成空白说明连接成功如果提示连接失败说明端口不通。Windows默认不一定装了telnet客户端用PowerShell更省事Test-NetConnection 192.168.1.100 -Port 1433返回结果里看TcpTestSucceeded是否为TrueTrue就是端口能通False就是不通。这个测试能帮你快速切分问题telnet不通说明网络或防火墙层面还有问题telnet通了SSMS还报错那就要往协议、实例名、认证方向排查。逻辑顺序对了能省下大量来回试错的时间。3.3 实例名是“大门钥匙”千万别写错SSMS里服务器名称一栏的写法有讲究。本机默认实例可以直接写一个点号.或者localhost、127.0.0.1、(local)都能连。远程连接默认实例写IP地址即可。远程命名实例至少涉及两种写法主机名\实例名或者主机名,端口。很多新手会从网上复制别人的写法比如带反斜杠的写法却漏了实例名或者IP后面多了一个多余的反斜杠服务端根本解析不来。命名实例推荐用IP,端口的方式最可靠。实例名解析依赖SQL Server Browser服务而端口连接直接绕过了这一层只要端口固定连接就非常稳定此处指技术上可靠。如果你连的是主机名而不是IP先ping一下确认主机名真的解析到了目标服务器。我遇到过几次连接失败最后发现是hosts文件里残留了旧IP。3.4 认证模式和sa账户连接成功却登录失败有时候报错文字会稍微不一样“已成功与服务器建立连接但是在登录过程中发生错误”错误码18456。这就不是网络问题了是认证阶段失败。原因一般有几种实例认证模式仍是Windows身份验证远程传来的SQL账号不被允许sa被禁用了账号密码错误。如果当前只能本机用Windows身份登录可以在SSMS里把服务器认证模式改成混和模式服务器属性 - 安全性 - 服务器身份验证 - 选择“SQL Server和Windows身份验证模式”然后重启服务。也可以用脚本USE master; GO EXEC xp_instance_regwrite NHKEY_LOCAL_MACHINE, NSoftware\Microsoft\MSSQLServer\MSSQLServer, NLoginMode, REG_DWORD, 2; GO同样需要重启SQL Server服务才能生效。启用SQL登录之后还要注意sa账号可能在安全对象里是禁用状态需要右键启用并把密码改复杂点。生产环境不建议直接开sa最好单独建一个具有所需权限的SQL登录账户遵循最小权限原则。4. 容易被忽略的隐藏坑与常见问题速查4.1 SSMS版本与SQL Server版本不匹配回到标题还有一类“无法连接到服务器”是客户端工具本身太旧引起的。SQL Server 2022之后连接的加密和协议要求有变化如果你还在用很老的SSMS 17、18早期版本连接时很可能出现报错而且提示不一定直接说版本兼容会让你误以为服务端出了问题。解决办法就是换新版SSMS。SSMS是独立安装的免费工具换版本不需要重装SQL Server直接下载新版本安装即可。打开SSMS的帮助 - 关于看下版本号。一般来说连SQL Server 2019建议SSMS至少18.12以上连SQL Server 2022建议用19或20。4.2 远程连接选项被关闭、强制加密导致握手失败另一个容易忽略的是实例属性里的“允许远程连接到此服务器”。默认是勾选的但如果被运维或某些安全脚本改掉就会出现本机能连、远程连不上。这个选项在SSMS里右键服务器 - 属性 - 连接选项卡下改完重启服务生效。再就是加密。SQL Server 2022开始默认强制加密如果没有在服务器上配置证书客户端连接时可能会在握手阶段就中断报“客户端无法建立到服务器的连接”或“SSL提供程序”相关错误。测试环境可以在SSMS的连接选项里把加密临时设置为False并勾选“信任服务器证书”。生产环境还是建议正经配置证书别为了省事把加密直接关掉。4.3 常见错误码与现象速查表错误码或现象主要原因处理建议Error 26SQL Browser未启动、TCP/IP未启用启用TCP/IP启动Browser或改用端口直连Error 40端口不通、协议禁用检查监听端口防火墙放行对应端口Error 53主机名解析失败ping测主机名改用IP连接Error 10060防火墙丢弃包或跨网段不通检查系统防火墙和云安全组telnet复测Error 10061端口没监听或安全策略拦截确认服务状态和端口监听Error 18456认证模式、账号密码、权限问题启用混和模式启用账号重置密码连接成功但随即断开加密或协议不匹配检查强制加密和客户端版本调整加密设置或升级SSMS这张表不用背遇到问题时按行查一下基本能快速圈定排查范围。4.4 搜索引擎里的“一键修复工具”靠谱吗简单提醒一句网上搜这个问题时偶尔会看到各种“SQL Server无法连接一键修复工具”这类小工具我建议尽量别碰。它们做的事情无外乎启动服务、改注册表、放行端口原理就是前面说的这些。但系统环境千差万别一个脚本里还藏着什么附加操作很难保证。老老实实按上面几步排查通常超不过十分钟就能定位。5. 我平时最快的一套排查动作很多朋友会问我你天天处理这种问题有没有固定套路其实有尤其是线上环境没人有耐心让你慢慢试。我的顺序基本固定先看完整错误信息尤其要看错误码。一次看不清就问两次别急着猜。在服务器本机跑一遍sqlcmdsqlcmd -S . -U sa -P 密码 -Q SELECT VERSION能出结果说明服务、协议、认证在本机层面都是正常的问题大概率在网络链路或客户端配置上。在客户机上跑telnet或Test-NetConnection。如果端口不通就是防火墙或安全组如果通了还连不上再看实例名和SSMS版本。最后回到SSMS重连一次。别反复重装SQL Server大多数场景根本不需要。有一次我被一个命名实例折腾了半小时最后发现是连接字符串里写的是“服务器名-实例名”中间用了一个中划线而不是反斜杠客户端直接把它当成完整主机名去解析了。这种低级错误其实经常出现尤其是代码里拼接连接串时容易漏。所以在SSMS里测试连接时宁可手动再敲一遍服务器名称也不要直接从网上整段复制连接串。还有一个冷门但真实的坑如果数据库服务器上有虚拟化快照、复制或者系统时间被频繁调整端口看起来一切正常但客户端在TLS握手阶段卡死这时检查一下服务器系统时间还是很有必要的。证书有效期判断和系统时间强相关时间偏差太大会让基于证书的握手直接失败。最后建议在自己服务器上动手之前先把数据库做一次备份哪怕是测试环境。排查连接问题属于低风险操作但改到端口、服务、防火墙时一旦手滑也可能导致服务起不来。稳一手永远不亏。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻