SQL连接不上服务器,九成是五个环节中的某一个出了岔子:网络不通、服务没起、端口被拦、账号权限不对、或者实例名写错。 下面把每一步的排查方法拆开讲,按顺序走一遍,多数情况下十分钟内能定位问题。
数据库连不上的第一道坎:网络通路
很多用户一报错就怀疑密码错了,其实先别急,连接数据库的第一步是网络层,服务器IP或域名得能通,本地电脑连不上远程数据库,多半卡在这一层。
- ping测试:打开命令行,输入
ping 服务器IP,如果丢包或者超时,说明网络根本不通,这时候检查服务器是否开机、IP是否有变化、云服务器安全组是否放行了入站规则。 - telnet测试端口:SQL Server默认端口是1433,MySQL是3306,用
telnet 服务器IP 1433试一下,如果提示无法打开连接,说明端口被防火墙堵住了,或者服务没有监听。
服务器防火墙设置在Windows Defender里,允许入站规则里要有1433端口。 云服务器的话,还要去控制台的安全组里加一条规则,只放行自己办公的IP会更安全。
服务本身没有启动
网络通了,端口也通,下一个要确认的是数据库服务本身是否在运行。
在装有数据库的服务器上,按Win+R输入services.msc,打开服务管理器,找到类似SQL Server (MSSQLSERVER)的服务项,看它的状态是不是正在运行。
- 如果显示已停止,右键启动即可。
- 如果启动后立刻又停了,去Windows事件查看器里看应用程序日志,记录下具体的错误代码,这种情况多半是配置文件损坏或磁盘空间不够。
行业共识认为,相当一部分“连接不上”的问题,根源是服务器重启后数据库服务没有设置为自动启动。 双击该服务,把启动类型改成“自动”,能避免下次又连不上的尴尬。
端口冲突或被安全软件拦截
如果服务运行正常,但telnet还是不通,就得看看端口是不是被别的程序占用了。
在服务器上打开命令行,执行netstat -ano | findstr 1433,看LISTENING状态后面的PID是多少,然后打开任务管理器,按PID找到对应的进程,如果PID对应的不是sqlservr.exe,而是别的程序,说明端口被抢了,修改SQL Server的端口,通常在SQL Server配置管理器里,网络配置→TCP/IP协议→IP地址,把端口改成14333之类的自定义端口,然后重启服务,客户端连接字符串里的端口号也要同步修改。
装了360、腾讯管家之类的第三方安全软件,偶尔会拦截数据库进程的网络访问,排查时可以先暂时退出这些软件再试一次连接,如果通了,就在安全软件里把sqlservr.exe加入白名单。

账号权限和身份验证模式
网络、服务、端口都正常,连接时报“用户登录失败”,这时候问题出在账号层面。
- 身份验证模式:SQL Server安装时可以选Windows身份验证或混合模式,如果只选了Windows验证,你拿SQL账号登录肯定失败,在服务器上用Windows管理员身份打开SQL Server Management Studio(SSMS),右键服务器→属性→安全性,把服务器身份验证改成“SQL Server和Windows身份验证模式”,然后重启服务。
- 账号状态:检查登录名是否被禁用,用SSMS连接之后,展开“安全性→登录名”,双击你的账号,看状态是不是“已启用”。
- 密码过期策略:很多企业环境强制密码过期,如果密码失效了,也会报登录失败,重置一下密码即可。
比较容易被忽略的一点是,SQL Server默认不开放sa账号的远程连接。 就算密码是对的,sa账号在属性里如果没有设置“连接数据库引擎”的权限,远程一样连不上,设置路径:登录名→sa属性→状态→权限,确保“授予”连接数据库引擎的权限是选中的。
实例名写错,一个很常见的低级坑
连接字符串里,服务器地址不只是IP,还可能有实例名,例如168.1.100SQLEXPRESS,IP后面的反斜杠和实例名很容易被漏掉,或者大小写写错,默认实例(MSSQLSERVER)可以直接连IP,命名实例必须带上实例名。
连接字符串里有时需要加端口号,格式是IP,端口,逗号是英文的,很多人打成中文逗号或冒号。 例如168.1.100,1433,写错了照样连不上。
| 场景 | 正确写法 | 常见错误 |
|---|---|---|
| 默认实例 | 168.1.100 |
168.1.100:1433(SQL协议不认冒号) |
| 命名实例 | 168.1.100SQLEXPRESS |
漏掉反斜杠或写错实例名 |
| 指定端口 | 168.1.100,14333 |
端口前后有空格或用了全角逗号 |
从报错信息反推故障点
很多人在遇到sql数据库连接不上服务器时,只看最后一句“连接失败”,其实前面几行详细描述才是关键,教你一个快速定位法:
- 报
SQL Server不存在或访问被拒绝大概率是实例名或网络问题,少数情况是浏览器服务(SQL Server Browser)没启动。 - 报
用户sa登录失败账号密码错了,或者身份验证模式不对。 - 报
超时时间已到网络通了,但服务器响应慢,通常是防火墙拦了数据包,或者服务器CPU/内存被打满,也可能是连接字符串里没设置连接超时时间,默认15秒太短,建议设成30秒。 - 报
建立到服务器的连接时发生错误先看Windows防火墙是否放行端口,再看是否开启了强制加密(Force Encryption),如果开了,客户端证书配置不对也会失败。

SQL Server Browser服务需要特别提一下,如果是命名实例,客户端要通过浏览器服务来解析端口号,该服务默认是禁用的,把它启动类型设置为“自动”并运行起来,能解决不少连不上命名实例的问题。
本地能连,远程连不上:怎么回事
这个场景很典型:在服务器上用SSMS连数据库一切正常,回到自己办公电脑就连不上,这基本可以把账号和数据库本身的问题排除,问题出在两者之间的路。
按顺序排查:
- 检查服务器防火墙入站规则,1433端口是否放行,并且限于特定IP还是所有IP。
- 检查云服务器安全组规则,入方向是否有允许TCP 1433的规则。
- 检查路由器(如果是本地机房),是否有端口映射或NAT规则把外部访问转发到数据库服务器。
- 检查客户端软件,是否设置了代理,例如Navicat,在“工具→选项→代理”里,如果开了HTTP代理,数据库连接流量会走代理,代理服务器如果不允许长连接,也会失败。
这里要特别提醒一下,SQL Server连接走的是TCP协议,HTTP代理默认不支持直接转发这种长连接。 建议把代理关掉再试。
连接数满了或者连接池用尽
如果是开发环境多人共用一台测试数据库,经常会出现“连接不上”的错觉,其实是连接池满了。
最大连接数这个值默认是0,表示不限制,但内存或线程资源有限,实际并发量受硬件约束,测试库上跑了很多服务,每个服务池化10个连接,上百个服务就能把数据库资源耗尽。
查看当前连接数:
SELECT COUNT() FROM sys.dm_exec_sessions
如果这个数字很大,说明连接数确实吃紧了,解决办法是改连接字符串里的Pooling参数,或者杀掉空闲会话:
KILL 会话ID
多数情况下,这不是数据库“问题”,而是连接管理没做好,给每个应用按需分配独立账号,限制最大连接数,能改善不少。
客户端驱动版本太旧
还有一个容易忽略的点:驱动版本过旧,例如老版本的JDBC驱动,连新版的SQL Server 2019或2026,会因为加密握手协议不一致而失败,客户端如果报类似SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的,说明证书问题。
解决办法有两个路径:
-

更新JDBC或ODBC驱动到最新稳定版。
- 在服务器上把“强制加密”关掉,或者生成并安装受信任的证书。
对于小团队内部测试环境,直接关掉“强制加密”是最省事的做法,路径:SQL Server配置管理器→SQL Server网络配置→协议→右键属性→标志→强制加密→否,然后重启服务。
常见的几个排查工具和命令
把这些命令复制到命令行里,一步步执行,能看到每一层的结果,方便判断故障在哪一步。
ipconfig:查看本地IP配置,确认自己在不在同一网段。ping 数据库服务器IP:确认服务器在线。telnet 数据库服务器IP 1433:确认端口监听和防火墙放行情况。netstat -ano | findstr 1433:确认服务器上端口被谁占用。sqlcmd -S 服务器IP -U sa -P 密码:在客户端侧直接测试TDS协议是否可用。
你真的改对配置文件了吗
有时候配置文件里的连接字符串是对的,但程序读取的是环境变量或者外部配置文件,导致你改了没生效,常见场景是Java应用,application.yml里写了一行url: jdbc:sqlserver://localhost:1433;DatabaseName=test,但实际打包运行时,application-prod.yml把这一行覆盖了。
排查时可以做的操作:
- 在部署目录里执行
jar tf确认配置文件打包进去的是不是你改的那份。 - 在数据库端开SQL Profiler,看有没有收到来自客户端IP的登录请求,如果Profiler里完全看不到请求,说明请求根本没到数据库,问题在客户端和网络链路;如果请求到了但报错登录失败,那就专注查账号权限。
参考链接:
- 微软官方文档:SQL Server 网络配置
- 来自 Stack Overflow 社区讨论:SQL Server 登录失败错误 18456 的排查
相关问题
sql server连接失败,一般先查什么?
先查网络层,用telnet测试IP和端口的连通性,通不过就排查防火墙、安全组、端口监听,这一层没问题后,再查账号和身份验证。
为什么本机可以连,其他电脑连不上sql数据库?
本机能连说明服务本身正常,其他电脑连不上通常是防火墙入站规则、云安全组规则或端口映射没有正确配置,少数情况是客户端驱动版本不一致。
sa账号登录报错18456是什么原因?
这是SQL Server登录失败的通用错误码,具体原因要看错误描述后面的状态码,状态码1表示密码错误,状态码2表示账号被禁用,状态码8表示密码为空而服务器不允许空密码登录,最常见的原因是sa账号密码复杂度不够,或者身份验证模式仍处于Windows身份验证模式。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/868451.html


评论列表(5条)
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是服务器部分,给了我很多新的思路。感谢分享这么好的内容!
读了这篇文章,我深有感触。作者对服务器的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
读了这篇文章,我深有感触。作者对服务器的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于服务器的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
读了这篇文章,我深有感触。作者对服务器的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!