SQL Server 提示“命名管道 error 40”?这不是网络问题,是协议问题!
导语
每一位 SQL Server DBA 都可能在部署完毕后,遭遇过这样一个“劝退”式报错:
(provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) → 拒绝访问。
你反复检查 IP、端口、账号、密码,甚至把 sa 密码复制粘贴了 100 遍,但结果依然是冷冰冰的拒绝。你以为是网络问题,是防火墙问题,甚至怀疑自己电脑中毒了。
别再折腾了!
真正的凶手是 SQL Server 独有的“协议管理”机制。
你的客户端 SSMS 试图用命名管道(Named Pipes)协议去连接,但 SQL Server 服务端却默认禁用了 TCP/IP,这导致连接必须走跨主机的 SMB 认证,最终被系统“拒绝访问”。
今天,【安呀智数据坊】将带你彻底告别这个新手噩梦。
我们提供一份保姆级 5 步 SOP,配合独家的一键排错脚本,帮你搞定 SQL Server 2019/2022 远程连接的所有历史遗留问题!
-
适用场景
主机通过 SSMS 连接虚拟机 / 远程服务器上的 SQL Server 时出现连接失败
-
适用版本
SQL Server 2016 / 2017 / 2019 / 2022
-
客户端工具
SSMS 18 / 19 / 20+
问题现象
在使用 SSMS 从主机连接部署在虚拟机中的 SQL Server 时(例如虚拟机 IP 192.168.74.90),填写正确的服务器地址、sa 账号和密码后,点击"连接"报错:
在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。
未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。
(provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)
(Microsoft SQL Server,错误: 5)
其他信息:
→ 拒绝访问。
报错截图:

错误关键信息解读
这个报错包含 3 个关键信息,是解决问题的核心线索:

核心原因
命名管道(Named Pipes)是本机进程间通信协议,跨主机(尤其是主机 ↔ 虚拟机)连接时会走 SMB 协议,需要 Windows 域账号认证。
这不是远程数据库连接的正确方式。
远程连接 SQL Server 必须走 TCP/IP 协议,但错误提示走了命名管道,说明:
1) 🎯 SQL Server 端 TCP/IP 协议未启用,或
2) 🎯 客户端连接串未强制指定使用 TCP 协议
问题根因分析
SQL Server 支持多种网络协议,默认优先级如下:

默认安装 SQL Server 后,TCP/IP 是禁用状态,只能本机连接。
这是很多新手远程连接失败的根本原因。
完整解决步骤
步骤 1:启用 TCP/IP 协议
(虚拟机端操作)
1)打开 SQL Server 配置管理器
开始菜单 → Microsoft SQL Server 2019 → SQL Server 2019 配置管理器

2)打开 SQL Server 配置管理器
依次展开左侧:
SQL Server 网络配置 → MSSQLSERVER 的协议
右侧列表中找到 TCP/IP,如状态显示 "已禁用":
-
右键 → 启用

3)配置 TCP 端口
双击 TCP/IP → 切换到 "IP 地址" 选项卡 → 滚动到最下方 IPAll:

⚠️ 重点:TCP 动态端口必须清空,否则 SQL Server 会随机分配端口,1433 就不会生效。

步骤 2:重启 SQL Server 服务
配置修改后必须重启服务才能生效。

方式一:服务管理器
services.msc → SQL Server (MSSQLSERVER) → 右键 重新启动
方式二:PowerShell(管理员)
Restart-Service MSSQLSERVER -Force
步骤 3:验证端口监听状态(虚拟机端)
在虚拟机内 PowerShell 或 CMD 执行:
netstat -ano | findstr :1433
期望输出:
TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING xxxx
TCP [::]:1433 [::]:0 LISTENING xxxx
如果没有任何输出,说明 TCP/IP 配置未生效,返回步骤 1 检查。
步骤 4:放行防火墙端口(虚拟机端)
在虚拟机 PowerShell(管理员)执行:
# 放行 SQL Server 端口
New-NetFirewallRule -DisplayName "SQL Server 1433" -Direction Inbound -Protocol TCP -LocalPort 1433 -Action Allow
# 放行 SQL Browser(可选)
New-NetFirewallRule -DisplayName "SQL Browser 1434" -Direction Inbound -Protocol UDP -LocalPort 1434 -Action Allow
快速排错时,可以临时关闭防火墙测试:
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
⚠️ 测试完成后记得恢复防火墙:
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
步骤 5:主机端连通性测试
在主机 PowerShell 执行:
Test-NetConnection 192.168.74.90 -Port 1433
期望结果:
ComputerName : 192.168.74.90
RemoteAddress : 192.168.74.90
RemotePort : 1433
TcpTestSucceeded : True ← 关键字段
步骤 6:SSMS 连接配置(主机端)
打开 SSMS,按以下方式填写连接信息:


关键技巧:tcp: 前缀
在服务器名称前加 tcp: 前缀,可以强制客户端使用 TCP 协议,避免走命名管道:
tcp:192.168.74.90,1433 ✅ 明确指定 TCP + 端口
192.168.74.90,1433 ⚠️ 可能走命名管道
192.168.74.90 ⚠️ 极可能走命名管道
步骤 7:连接成功验证
配置完成后点击"连接",SSMS 左侧对象资源管理器出现数据库列表,即连接成功。

常见问题排查清单
按顺序排查,覆盖 99% 的连接失败场景:

常见错误对照表

原理小结
理解以下几点,以后不会再踩坑:
1) SQL Server 默认不开 TCP/IP,远程连接前必须手动启用
2)命名管道 ≠ TCP/IP,跨主机连接必须走 TCP
3)动态端口和固定端口只能二选一,配置固定端口时动态端口必须清空
4)修改协议配置后必须重启 SQL Server 服务
5)连接串加 tcp: 前缀是最保险的做法
6)防火墙 + SQL 配置 + 认证模式,三者缺一不可
一键排错脚本
将以下脚本保存为 check_sqlserver.ps1,在虚拟机端 PowerShell(管理员)执行:
Write-Host "==== SQL Server 连接环境检查 ====" -ForegroundColor Cyan # 1. 检查服务 Write-Host "`n[1] SQL Server 服务状态:" -ForegroundColor Yellow Get-Service MSSQLSERVER | Format-Table Name, Status, StartType # 2. 检查端口监听 Write-Host "[2] 1433 端口监听状态:" -ForegroundColor Yellow $listen = netstat -ano | findstr :1433 if ($listen) { Write-Host $listen -ForegroundColor Green } else { Write-Host "❌ 1433 端口未监听!" -ForegroundColor Red } # 3. 检查防火墙规则 Write-Host "`n[3] 防火墙 1433 规则:" -ForegroundColor Yellow Get-NetFirewallRule -DisplayName "*SQL*" -ErrorAction SilentlyContinue | Format-Table DisplayName, Enabled, Direction, Action Write-Host "`n==== 检查完成 ====" -ForegroundColor Cyan
写在最后
error: 40 让我们看到了 SQL Server 独特的“协议管理”机制。这份 SOP,不仅是解决报错,更是帮你建立起“网络协议先行”的运维思维。
记住这 5 步铁律:
-
启用 TCP/IP(打开门神)
-
固定端口 1433(明确门牌号)
-
重启 SQL 服务(让门神生效)
-
放行防火墙(撤销拦截)
-
连接串加 tcp: 前缀(明确出行方式)
告别 Oracle/MySQL/PostgreSQL 的“无需思考”,拥抱 SQL Server 的“精细化配置”!
您在 SQL Server 使用过程中,遇到过哪些让您“想不通”的报错?(是 error: 26、error: 53 还是 error: 18456?)
原文链接:DBA 求救:SQL Server 提示“命名管道 error 40”?这不是网络问题,是协议问题! (qq.com)

浙公网安备 33010602011771号