尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

SQL Server内网连接访问全攻略:从TCP/IP到证书信任的完整配置指南

发布时间:2026/9/25 3:36:28

资讯中心
01
ARTICLE

SQL Server内网连接访问全攻略:从TCP/IP到证书信任的完整配置指南

SQL Server内网连接访问全攻略:从TCP/IP到证书信任的完整配置指南
搞数据库的人大概都遇到过这个场景开发环境里 SQL Server 跑得好好的本地写查询一点问题没有可一拿到内网里另一台电脑上要么连不上要么弹出各种奇怪的证书报错。其实“SQL Server 数据库可以在内网连接访问”这句话本身没有错但它背后藏着四个必须打通的环节——服务端监听、网络放行、身份验证、证书信任。任何一环没搞定你看到的都是“无法连接”。这篇文章把我从零配置内网访问的完整经验写出来包含服务端配置、客户端连接字符串、常见报错排查适合刚接触 SQL Server 的运维和开发也适合那些在公司内网环境里被连接问题折腾了一天的朋友。1. 内网连接访问的整体思路别急着改配置先搞懂四层链路很多教程一上来就让你改 SSMS 的服务器名称或者给 sa 账号设密码但大多数连接失败的根本原因是链路没通。我习惯把内网访问拆成四层挨个检查。1.1 SQL Server 是否真正在监听网络SQL Server 不是默认“站在门口等你”的。它装好之后到底监听哪个端口、走什么协议是由 SQL Server 配置管理器SQL Server Configuration Manager里的“SQL Server 网络配置”决定的。常用的协议有 Shared Memory本机进程通信、Named Pipes命名管道、TCP/IP真正的网络协议。内网访问必须走 TCP/IP可很多机器 TCP/IP 是禁用的或者启用了但监听的端口不对。这个问题在低版本上更隐蔽因为低版本安装时默认值可能跟你想的不一样。所以第一步永远不是去客户端折腾而是先到服务端确认TCP/IP 到底开没开监听端口是不是 1433 或你自己指定的那个。1.2 网络路径与防火墙是否放行就算 SQL Server 在监听操作系统防火墙、硬件防火墙、路由器 ACL 也可能把包拦在半路。内网不等于没有防火墙。Windows 的入站规则默认不会给 SQL Server 放行 1433你新装实例后不手动加规则其他机器就是过不来。判断网络是否可达最直接的办法是拿 telnet 或 PowerShell 的 Test-NetConnection 去敲服务器的 IP 和端口能通再继续往下查不然后面全是白忙。1.3 身份验证模式是否允许远程登录TCP 通了之后数据库本身还要认你这个登录名。SQL Server 安装时可以选 Windows 身份验证或混合模式。如果选的是 Windows 身份验证模式你用 sa 或者自定义 SQL 账号登录哪怕密码正确也会报 18456。内网机器加域的环境里用 Windows 身份验证很方便但如果客户端没加域、或者你不是用域账号跑客户端老老实实开混合模式启用 SQL Server 身份验证才是省事的办法。1.4 加密与证书是否匹配这是近几年特别容易踩的坑。新版 SQL Server 默认启用强制加密或带自签名证书而新版的客户端驱动比如 ODBC Driver 17/18、某些版本的 JDBC默认又要求校验 SSL 证书。两边一撞就会出现“证书链是由不受信任的颁发机构颁发的”这类报错。记住一个原则开发环境或内网环境里要么在连接串里显式加上信任自签名证书要么在服务端安装受信任的 CA 证书二选一否则永远连不通。2. 服务端关键配置在 SQL Server 配置管理器里把五件事做对服务端配置是整个内网连接的源头。我按实际操作顺序整理成五步每一步都有对应的验证方式。2.1 启用 TCP/IP 并固定端口打开 SQL Server 配置管理器开始菜单里搜 SQL Server Configuration Manager如果装了 SQL Server 2022 但没找到可以去 Windows 的“计算机管理”里看或者从 Microsoft 官网单独下载对应版本的管理工具然后依次展开“SQL Server 网络配置”点击对应实例比如“MSSQLSERVER”。右侧列表里能看到 Shared Memory、Named Pipes、TCP/IP 三项。双击“TCP/IP”切到“IP 地址”标签页。这里要关注两栏一是“IPAll”下面的“TCP 动态端口”如果里面有数字说明实例用的是动态端口客户端不好连接二是“IPAll”下的“TCP 端口”一般设成 1433。把动态端口里的数字清空固定端口写上 1433或者你内网规划的自定义端口。改完后重启 SQL Server 服务配置才生效。重启服务可以在配置管理器左侧“SQL Server 服务”里右键实例选“重启”也可以用命令行net stop MSSQLSERVER net start MSSQLSERVER注意如果实例名不是默认实例服务名会变成类似 MSSQL$SQLEXPRESS 的形式。2.2 防火墙放行 1433 端口服务端配置好后下一步就是给防火墙开门。Windows 防火墙操作路径是控制面板 → Windows Defender 防火墙 → 高级设置 → 入站规则 → 新建规则。规则类型选“端口”协议选“TCP”本地端口填 1433操作选“允许连接”。如果你担心公网暴露可以把作用域限制成内网网段比如只允许 192.168.1.0/24 访问这样即使端口开着外网也够不着。还有一种情况是服务器上有第三方安全软件比如 360、火绒之类这些软件自带网络防护可能会拦截入站流量。所以加了 Windows 规则后如果还连不上记得看一眼安全软件有没有拦截日志。2.3 开启混合验证模式并启用 sa 账号在 SSMS 里连上服务器右键服务器节点选“属性”切到“安全性”页把“服务器身份验证”改成“SQL Server 和 Windows 身份验证模式”。这一步做完最好重启一下 SQL Server 服务否则某些情况下不会马上生效。sa 账号在安装完之后默认是禁用的。用 SSMS 的“安全性 → 登录名 → sa”进去先把密码改成强密码然后右键 sa 选“属性”在“状态”页里把“启用”勾上。更直接的方式是执行 T-SQLALTER LOGIN [sa] WITH PASSWORD 你的强密码; ALTER LOGIN [sa] ENABLE;这里给个忠告sa 是超级管理员账号哪怕在内网也别用弱密码。我见过不止一次企业内部库被扫库工具扫到起因就是 sa 密码设置成了简单数字。内网不等于安全这点意识必须有。2.4 高版本 SQL Server 的加密与证书策略前面说过新版驱动的证书校验问题。在服务端SQL Server 2019、2022 默认会生成自签名证书并对连接启用“强制加密”策略。你可以打开 SQL Server 配置管理器右键“SQL Server 网络配置”下的“协议”选“属性”在“标志”页里看到“Force Encryption”如果设成了“是”那所有连接都必须走 SSL 加密客户端必须信任服务端证书。处理办法有两种一是保持 Force Encryption 是然后给 SQL Server 配置一个企业 CA 签发的正式证书让客户端能通过证书链验证二是内网环境图省事把 Force Encryption 设成“否”等客户端报证书错误时在连接串里写 TrustServerCertificateTrue。记住这是两个层面的东西服务端强制加密 客户端信任自签名证书这才是常见的内网标准组合。2.5 实例服务重启与验证配置改完后右击实例选“重启”。重启之后用服务端本机检查端口是否在监听netstat -ano | findstr 1433看到 LISTENING 状态说明 SQL Server 已经开始在 1433 端口上接收连接了。这步一定要做因为有时候你改了 TCP/IP 配置但忘了重启服务还跑在老配置上客户端依然是“找不到实例”或者“连接超时”。3. 客户端连接配置与连接字符串速查服务端通了客户端这边同样有细节。很多人卡在“服务器名称怎么填”“连接串怎么写”这两个问题上。3.1 SSMS 连接参数服务器名称的写法打开 SSMS第一行“服务器名称”里不是你随便填个 IP 就能通的。最常用的三种写法是写法适用场景示例IP,端口明确使用 TCP 端口连接最稳定192.168.1.10,1433主机名\实例名连接命名实例依赖 SQL Browser 服务WIN-SERVER\MSSQLSERVERIP\实例名,端口同时指定实例和端口更精确192.168.1.10\MSSQLSERVER,1433我的建议是能写 IP 加端口就写 IP 加端口别依赖实例名解析。命名实例的端口解析需要 SQL Server Browser 服务UDP 1434配合内网环境里很多人没开这个服务或者防火墙把 UDP 1434 挡了你会看到一个很普通的“服务器找不到”错误实际原因是解析动态端口失败了非常冤枉。身份验证这一块选“SQL Server 身份验证”输入 sa 和密码。如果你是域环境也可以选“Windows 身份验证”前提是服务端开着 Windows 验证模式且客户端有权限。3.2 编程语言的连接字符串直接抄作业内网连接最终往往要落到代码里。下面三类连接串我实测过只要服务端配置对了复制粘贴就能用。C# / .NETServer192.168.1.10,1433;Database你的库名;User Idsa;Password你的密码;TrustServerCertificateTrue;EncryptTrue;Pythonpyodbcimport pyodbc conn_str ( DRIVER{ODBC Driver 17 for SQL Server}; SERVER192.168.1.10,1433; DATABASE你的库名; UIDsa;PWD你的密码; TrustServerCertificateyes; ) conn pyodbc.connect(conn_str)JavaJDBCString url jdbc:sqlserver://192.168.1.10:1433; databaseName你的库名; encrypttrue;trustServerCertificatetrue; usersa;password你的密码;;重点解释一下TrustServerCertificateTrue的作用它表示客户端不去校验服务器证书是否由受信任的 CA 签发直接用服务器提供的自签名证书完成加密。对应的就是热词里经常出现的“证书链不受信任”那个报错加上它基本就能消掉。3.3 命令行验证不装图形工具也能连有些服务器没装 SSMS只用 sqlcmd 就够了。命令格式很直白sqlcmd -S 192.168.1.10,1433 -U sa -P 你的密码 -Q SELECT VERSION如果只想测试端口通不通用 PowerShellTest-NetConnection 192.168.1.10 -Port 1433TcpTestSucceeded 返回 True说明网络层没问题。这比开 SSMS 慢慢试快得多我排查问题从来都是先跑这条命令。4. 实操全流程从零到连通的完整记录前面把原理和零散配置讲清楚了这一节给一个完整流程方便你照着操作。4.1 确认当前服务器状态登录数据库服务器打开服务管理器Win R输入 services.msc找到“SQL Server (MSSQLSERVER)”确认状态是“正在运行”。然后打开命令提示符netstat -ano | findstr 1433没有输出就说明没监听回头查 TCP/IP 配置。这一步是“现状确认”能帮你少走很多弯路。4.2 修改 SQL Server 网络配置打开配置管理器依次完成展开“SQL Server 网络配置” → 选中实例。启用 TCP/IP右键选择“启用”。双击 TCP/IP在“IP 地址”标签页里把 IPAll 下的“TCP 动态端口”清空写上“TCP 端口” 1433。到“SQL Server 服务”里重启实例。注意不要试图把“IP 地址”下面所有条目都填一遍绝大多数场景只需要设置 IPAll 这一层。手动给每个具体 IP 填端口反而容易造成监听混乱。4.3 放通防火墙入站规则按前文提到的方法在 Windows 防火墙里新建入站规则放行 TCP 1433。你还可以顺便放行 UDP 1434这是给命名实例用的 SQL Browser 解析端口以防以后要连命名实例。加完后用客户端机器跑一次Test-NetConnection 192.168.1.10 -Port 1433通了继续不通检查服务器的 IP 地址是不是 192.168.1.10或者中间有没有硬件防火墙。4.4 启用 sa 与混合验证模式用本机 SSMS 登录执行EXEC xp_instance_regwrite NHKEY_LOCAL_MACHINE, NSoftware\Microsoft\MSSQLServer\MSSQLServer, NLoginMode, REG_DWORD, 2; GO ALTER LOGIN [sa] WITH PASSWORD 强密码; ALTER LOGIN [sa] ENABLE; GOLoginMode2就是混合验证模式的注册表写法省得一次次去界面里勾选。执行完重启 SQL Server 服务。4.5 客户端正式验证在另一台电脑上打开 SSMS服务器名称填192.168.1.10,1433身份验证选“SQL Server 身份验证”用户名 sa输入密码点连接。正常情况下会直接进入对象资源管理器能看到实例下的所有数据库。如果在这里还报错多半就是证书问题跳到第 5 章看排查方法。5. 常见报错与排查实录互联网上关于 SQL Server 内网连接的报错来来回回就那么几类。我按出现的频率整理成速查表再展开讲最麻烦的 SSL 证书问题。报错信息大概率原因解决办法证书链由不受信任的颁发机构颁发-2146893019客户端校验服务端自签名证书失败连接串加 TrustServerCertificateTrue客户端无法建立连接-2146893019网络不通或证书问题先测端口连通性再查证书配置用户 x 登录失败错误 18456密码错误 / 账号禁用 / 非混合验证模式启用 sa设置强密码切换验证模式在连接到 SQL Server 时TCP 端口 1433 被拒绝防火墙未放行服务端端口添加防火墙入站规则找不到实例 / 无法解析服务器名称命名实例动态端口没解析改用 IP,端口 形式或启动 SQL Browser驱动程序无法通过 SSL 加密建立安全连接服务端强制加密客户端不信任证书服务端装正式证书或客户端信任自签名证书5.1 SSL 证书链报错-2146893019 的完整解法常见的报错原文是这样的[08001] [Microsoft][ODBC Driver 17 for SQL Server]SSL 提供程序: 证书链是由不受信任的颁发机构颁发的。(-2146893019) [08001] [Microsoft][ODBC Driver 17 for SQL Server]客户端无法建立连接 (-2146893019)我最早见到这个报错是在 2021 年当时把 ODBC 驱动从 13 升到 17旧连接串直接全部不能用了。原因很简单新版驱动默认对服务器发来的自签名证书进行校验证书链而 SQL Server 默认用的就是自己签发的证书自然不在系统受信任的根证书列表里于是客户端认为“证书不可信”拒绝建连。解法优先级如下在连接串中加入TrustServerCertificateTrue或TrustServerCertificateyes。这是最快、最适配内网开发环境的方式。如果你用的是 ODBC DSN 方式去“ODBC 数据源管理器”里的“连接”页勾选“信任服务器证书”。长期、生产环境正确做法是给 SQL Server 安装正式证书在配置管理器实例属性里的“证书”页签导入受信任 CA 签发的证书然后开启 Force Encryption。不要在服务端把 Force Encryption 设为“否”来逃避问题这会让数据库连接以明文方式在网络上传输。内网环境里虽然相对安全但只要有人做了抓包你的数据库账号密码和业务数据就全暴露了。5.2 错误 18456sa 无法登录18456 几乎是 SQL Server 登录失败的标准报错。大多数人第一个反应是“密码错了”但其实后面还有“状态码”可以看。状态码含义18456一般性登录失败18456, 状态 1SQL Server 服务登录该账号的信息有问题18456, 状态 2 / 5账号被锁或被禁用最常见18456, 状态 8密码不正确18456, 状态 9密码过期或者必须更改如果是状态 2/5去 SSMS 里把 sa 账号启用状态 8 就重置密码状态 9 执行ALTER LOGIN sa WITH CHECK_EXPIRATION OFF关掉密码过期策略再重新设置强密码。注意内网里面为了让密码策略不捣乱可以统一关掉强制过期但密码复杂度别降。5.3 端口不通Telnet 和 netstat 组合排查如果Test-NetConnection显示 TcpTestSucceeded 为 False问题肯定在网络层跟 SQL Server 无关。这时按顺序查服务器本机执行netstat -ano | findstr 1433确认端口处于 LISTENING 状态。客户机上执行ping 192.168.1.10确认能通如果 ping 不通检查 IP 和交换机配置。检查 Windows 防火墙入站规则是否存在并已启用。用服务器本机再执行telnet 127.0.0.1 1433通了说明服务没问题问题在防火墙或网络路径。5.4 命名实例连不上的坑SQL Browser 服务内网环境里很多人喜欢写“服务器名\实例名”比如192.168.1.10\MSSQLSERVER。如果默认实例倒也还好但命名实例依赖 SQL Server Browser 服务通过 UDP 1434 解析端口。很多精简系统默认把 Browser 服务禁用了或者防火墙没放行 UDP 1434于是客户端拿着实例名到处问“这个实例在哪个端口”没人回答最终报错。最稳妥的做法就是不依赖实例名直接查清楚端口后写IP,端口。动态端口本身就不好维护建议在生产环境固定端口省心。5.5 其他工具类报错的共性热词里出现的 SolidWorks Electrical 无法连接 SQL Server、Excel 导入数据库报错等问题本质上都是同一个模型某个客户端工具拿着它自己的连接配置去连 SQL Server 的内网实例。排查思路永远是确认工具要求的服务器名、实例名、端口写法。在工具的本机环境里验证Test-NetConnection。用最小的手段sqlcmd / SSMS确认数据库账号能登录。再去改工具的连接配置。不要一上来就重装工具或重装 SQL Server大概率是配置细节没对上。6. 内网连接之外的高频场景同步、备份、批量配置连接打通之后很多衍生需求也会接连出现。数据库同步、备份还原、多机批量配置这些场景里藏着不少坑。6.1 数据库同步与高可用数据库同步工具不一定是第三方软件SQL Server 本身就支持发布订阅Replication、镜像、Always On 可用性组。无论哪种方案它们都依赖数据库实例之间的网络互通。做内网同步时除了 1433 端口还要特别关注端点端口、UDP 1434 以及 Windows 防火墙对多播广播的放行情况。我见过一个同步作业每天凌晨失败排查了很久才发现是备用服务器防火墙规则里只放了 1433没放镜像端点端口流量被静默丢弃同步自然时断时续。6.2 备份还原与版本兼容热词里有个“sql server 2012的数据库备份2008能用吗”类似的问题这类“版本向下兼容”问题跟连接不太一样但影响很现实。你从高版本备份的 .bak 文件低版本实例是不能直接还原的因为物理结构不兼容。反过来说低版本备份还原到高版本一般没问题。如果你在做跨版本迁移或内网多机同步先用DBCC CHECKDB检查源库完整性再按目标版本实际测试还原别丢到生产机上才发现报错。备份文件在内网里传输本身不依赖 SQL Server 端口但如果你用的是共享文件夹反而要注意系统账户的共享权限这是一个容易被忽略的“假连接问题”。6.3 多台机器批量配置的小技巧如果你要管理十几台 SQL Server挨个用 SSMS 图形界面配置太慢了。我实际操作中最常用的做法是先配置好一台模板机然后把关键信息提取成脚本用下面的思路批量执行记录模板机的注册表LoginMode值和 TCP/IP 配置位置。用 PowerShell 脚本批量检测每台机器的 1433 端口监听情况。通过远程 PowerShell 或配置管理器接口统一修改 TCP/IP 状态和防火墙规则。但注意不要盲目复制注册表值因为实例名称不同时注册表路径里的MSSQL16.MSSQLSERVER会不一样复制前先核对实例路径避免改到别的实例上。我在实际项目里最常遇到的情况不是 IP 地址写错也不是防火墙没开而是很多人把 SQL Server 当作“装好就能远程连”的软件完全忽略了服务端 TCP/IP 可能被禁用、sa 默认被禁用、新版驱动默认校验证书这三件套。内网连接访问 SQL Server 这件事配置链路并不复杂只要把服务端监听、网络放行、账号验证、证书信任四个环节逐一确认基本都能通。最后顺手再分享一个排查习惯每改完一处配置都立刻用Test-NetConnection和 sqlcmd 做一次最小化验证而不是直接打开完整的 SSMS 去看图形界面。这个习惯能帮你把“配置错误”和“网络故障”快速区分开节省大量排查时间。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。