SQL Server TDSSNIClient 初始化失败

现象:SQL Server 服务无法启动,查看事件日志:

TDSSNIClient 初始化失败,出现错误 0x80092004,状态代码 0x80。原因: Unable to initialize SSL support. Cannot find object or property.

找不到证书 “*********************”, 请参阅联机丛书中的“配置证书以供SSL使用”。

TDSSNIClient 初始化失败,出现错误 0x80092004,状态代码 0x1。原因: Initialization failed with an infrastructure error. Check for previous errors. Cannot find object or property.

由于网络库中存在内部错误,所以无法启动网络库。要确定原因,请查看错误日志中紧位于此错误之前的那些错误。

 SQL Server 无法生成 FRunCommunicationsManager 线程。请查看 SQL Server 错误日志和 Windows 事件日志,获取有关可能发生的相关问题的信息。

解决:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\****(SQL服务名称) \MSSQLServer\SuperSocketNetLib\

删除 Certificate 键值,重新启动服务 SQL Server

原理:

我们先来了解下SQL Server装载证书的步骤。

1.       SQL Server 搜索HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib\Certificate。通过Certificate键值中记录的证书的thumbprint来到certificate store中寻找相应的证书。如果找不到该证书,则SQL Server启动失败。

2.       如果Certificate键值为空,则SQL Server到certificate store中去寻找subject CN与SQL Server服务器主机的FQDN相同的证书。如果有这样的证书存在,SQL Server就读取第一个它找到的证书,装载并启动。

3.       如果还是找不到证书,则SQL Server就自动生成一个证书并使用这个证书启动。

有人可能是通过SQL Server configuration manager来选择证书并将它配置给SQL Server的。其实SQL Server configuration manager也是通过写Certificate键值来达到配置证书的目的。另外要注意的是SQL Server configuration manager中的下拉列表只能显示那些subject CN与SQL Server服务器主机的FQDN相同的证书。因此如果你需要配置一个CN与SQL Server服务器主机的FQDN不同的证书的话(除非是cluster环境,否则不推荐这样做,可能导致客户端连接问题),就需要使用手动修改Certificate键值的方法。

其次,如果不指定Certificate键值的话,则SQL Server自动搜索Certificate store中符合要求的证书。此时如果存在多个证书的话,我们是无法控制SQL Server选择哪个证书的。理论上SQL Server使用它找到的“第一个”证书,但是我们不能确定第一个证书是哪个。

基于上述的考虑,为了确定SQL Server使用我们想要的证书,我们推荐永远使用编辑Certificate注册表键值的方式来配置证书。具体的配置方式是:

1.       在Certificate中打开要使用的证书,复制其thumbprint。

2.       如果HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib\Certificate不存在的话,就手动创建一个。需要注意的是,对于SQL Server 2000的,键值的类型是binary,对于SQL Server 2005及以后版本的SQL Server,键值的类型是string。

参考文章: https://blog.csdn.net/kufeiyun/article/details/15337097

Share

You may also like...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据