【1】问题
【1.1】sql server启动报错
TDSSNIClient 初始化失败,出现错误 0xffffffff,状态代码 0x80。原因: Unable to initialize SSL support.
SQL Server 无法生成 FRunCommunicationsManager 线程。请查看 SQL Server 错误日志和操作系统错误日志,获取有关可能发生的相关问题的信息。
类似报错: TDSSNIClient初始化失败,错误0x80092004,状态代码0x80。原因:无法初始化SSL支持。 TDSSNIClient初始化失败,错误0x80092004,状态代码0x1。原因:初始化因基础结构错误而失败。 由于网络库中的内部错误,无法启动网络库。 SQL Server无法生成FRunCommunicationsManager线程。检查SQL Server错误日志和Windows事件日志,以获取有关可能的相关问题的信息。
【1.2】尝试
(1)关闭掉sql server 的 tcp/ip之后,可以用 share memory 连接
(2)以为是端口占用,换了很多其他端口,依然同样的报错;且 netstat -ano 中并未看到占用 1433 或指定端口
(3)用了【2.1】办法,SSCM中没有看到 VIA 选项,但注册表中是早已关闭的
(4)用了【2.2】办法,依然没用
【2】解决思路
(思路1)关掉VIA
【Microsoft SQL Server 2005】--【配置工具】--【SQL Server Configration Manager】 打开配置管理器窗口,左侧树形中找到“SQL Server 2005 网络配置”--“MSSQLSERVER的协议”,右侧的VIA协议为启用,改成禁用即可。
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib\Tcp
如果发现这里没有VIA选项,查看注册表;
(思路2)是否确定开启了SSL服务?
检查sql server configuration manager.
疑问:
TDSSNIClient 初始化失败,出现错误 0x80092004,状态代码 0x1。
原因: Initialization failed with an infrastructure error. Check for previous errors. Cannot find object or property.
TDSSNIClient 初始化失败,出现错误 0x80092004,状态代码 0x80。
原因: Unable to initialize SSL support. Cannot find object or property.
我在网上搜索相应文章,有说禁用via协议,但我在2012环境下,没有找到该协议;
有说修改注册表的,但是在注册表里也未找到SSL3.0 SSL2.0等项 跪求大神提供思路解决,感激不尽 服务器系统为 windows server 2012
解答:
从您的错误消息中,请确保您已在服务器上启用TLS1.2。请参阅
如何为Configuration Manager启用TLS 1.2 和 TLS 1.2对Microsoft SQL Server的支持。如果不起作用,请分享详细错误信息以供分析。
【TLS】实践操作
本部分转自:SQL server 2012 SP4设置TLS1.2:https://blog.csdn.net/cc93691810/article/details/87921989
(1)在Windows server 2008 R2系统注册表中设置TLS项。参考https://blog.csdn.net/jackbon8/article/details/82702563
第一种方法:手动设置
1.找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols 然后 右键->新建->项->新建TLS 1.2
2.在文件TLS 1.2中右键->新建->项->新建Server, Client
3.在新建的Server和Client中都新建如下的项(DWORD 32位值)
DisabledByDefault [Value = 0] Enabled [Value = 1]
第二种方法:写reg文件设置
或者使用
1.新建文本文件,将一下代码复制进去,后缀改为reg,双击导入
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client] “DisabledByDefault”=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client] “DisabledByDefault”=dword:00000000 “Enable”=dword:00000001 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server] “DisabledByDefault”=dword:00000000 “Enable”=dword:00000001 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client] “DisabledByDefault”=dword:00000000 “Enable”=dword:00000001 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server] “DisabledByDefault “=dword:00000000 “Enable”=dword:00000001
2.禁用老SSL配置
打开 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client 配置如下 DisabledByDefault [Value = 0] Enabled [Value = 0]
第三种方法:使用IISCrypto软件设置
最后: https://www.ssllabs.com/ssltest/index.html 可以通过这个网页检测网站是否支持TLS1.2
( 思路3)证书权限问题(没使用证书请忽略)
看上面的1、2两个错误后面的原因都是英文,其实以上就是找不到啥啥啥,由于sql server 开启强制协议加密,还能是啥啥啥,肯定是证书喽,那我们启用了,为啥还是找不到呢?可能的原因包括以下三种:
1、该证书可能已被移动或删除。
2、如果由 SQL Server 使用的登录名已发生更改,则 SQL Server 可能无权访问该证书。
3、该证书可能已过期。
按照思路走,以上三点肯定都不是,给予大脑皮层的又一反应,权限;那估计就是权限闹的,是根据2的启发来的,原因就是 SQL Server 可能无权访问该证书,这个是运行sql server实例的用户对证书的访问权限,我们现在操作一下权限;
具体操作如下:
需要在证书管理下,个人-证书,选择证书,右键所有任务-管理私钥。选择添加上运行sql server实例的用户。
PS:有的SQL SERVER是独立的用户运行,选择即可,如果自己没有设置过,直接给 Everyone 权限即可 选择 完全控制以及读取两个勾-具体看下图;
延伸阅读:
重启sql server实例一直失败,也可能直接提示“无法加载用户指定的证书 [Cert Hash(sha1) ”这个错误。
【结论】均没有解决问题
【参考文档】
同样的疑惑帖子:https://bbs.csdn.net/topics/330243569