sqlserver网络配置无内容
打开SQL Server配置管理器,络配点开SQL Server网络配置,置无子节点空空如也。内容连"协议"两个字都看不见。络配这台服务器装了SQL Server 2016,置无服务正常运行,内容端口监听正常,络配但配置管理器就是置无不给面子。
这问题我遇过三次,内容每次原因都不一样。络配第一次是置无权限问题,当前Windows账户不是内容Sysadmin,也不是络配本地管理员组,配置管理器读不到注册表键值。置无解决办法简单粗暴,内容右键以管理员身份运行。第二次更蹊跷,服务器上装了多个SQL Server实例,配置管理器默认连的是默认实例,而我的服务跑在命名实例上,界面里压根没显示出来。第三次最离谱,注册表被安全策略锁了,HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQLServer\SuperSocketNetLib这个路径下的键被改了权限,配置管理器读不了。
很多人第一反应是重装客户端工具,其实没必要。配置管理器本质上就是个注册表编辑器前端,它读的键值就那几个。SQL Server网络配置显示无内容,要么是权限不够读不到,要么是路径不对,要么是注册表项损坏。
我那次遇到注册表权限问题时,折腾了半小时。先试了网上说的"删除并重建协议键",没用。后来用Process Monitor监控配置管理器的注册表读取操作,才发现它访问HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL这个键时被拒绝。这个键记录着所有已安装实例的名称和注册表路径,读不到它,配置管理器就不知道有哪些实例,自然显示空白。
解决办法是手动给当前用户授予该键的读取权限。右键点击键名,选择权限,添加Authenticated Users,勾选读取。刷新配置管理器,网络配置就出来了。注意别给完全控制,只给读取就够了,免得破坏其他配置。
还有个隐蔽坑,Windows Server Core或Nano Server上装SQL Server,配置管理器可能压根不显示任何网络配置项。因为这些系统没有完整GUI,配置管理器依赖的某些WMI类不可用。这时候别纠结界面,直接用PowerShell改注册表,或者用SQL Server的sp_configure存储过程配合高级选项来调整网络设置。反正配置管理器只是个工具,目的达到就行。
如果你遇到的是客户端连接不上但服务正常,别浪费时间看配置管理器了,直接命令行跑netstat -ano | findstr 1433,看端口有没有监听。再不行就用telnet测端口通不通。配置管理器空白只是表象,网络通不通才是核心。我见过有人因为配置管理器显示空白,反复重装SQL Server,结果最后发现是防火墙拦了1433端口,跟配置管理器半毛钱关系没有。
要是注册表项真坏了,也别慌。先备份整个SQL Server注册表分支,然后手动重建SuperSocketNetLib键。键值结构不复杂,TCP/IP协议对应的子键下有IPAll和IP1、IP2等子键,每个IP子键包含端口、启用标志等值。照着另一台正常机器抄一份就行。注意SQL Server 2016及以上版本,TCP/IP默认监听1433,但有时候动态端口是0,表示启用动态端口。重建键后重启SQL Server服务,配置管理器就能正常显示了。
最后说句实在话,配置管理器这工具从2005年用到现在,UI基本没变过,但底层依赖的东西越来越多。遇到显示异常,先想想最近改过什么权限策略,装过什么安全软件,做过什么系统更新。八成是这些外部因素影响了注册表访问,而不是SQL Server本身出了问题。排查思路对了,五分钟就能解决。
(责任编辑:知识)
