SQL 服务器 20XX - "encryption not supported on the client" 使用链接服务器查询编译存储过程时

SQL Server 20XX - "encryption not supported on the client" when compiling stored procedure with linked server query

正在尝试在 SSMS 中编译存储过程,其中包含对链接服务器的开放查询。链接服务器已连接并位于我的 'Server Objects/Linked Servers' 文件夹中。我可以在查询选项卡中执行打开查询,但是当同一查询在过程中为 运行 时,我收到错误

Encryption not supported on the client

据我所知,这昨天才起作用,我这边没有任何变化。

我在我的机器上本地使用 SQL Server 2014,该过程正在尝试连接到位于其他地方的具有 "Pervasive" 数据库的链接服务器。不确定是哪个版本。

到目前为止,我已经尝试重新启动,我们的 SQL 服务器 DBA 没有意识到其他人的机器上存在问题。

我在其他地方找到了这个问题的答案...不在 Stack Overflow 上,所以为了方便我想在这里...

出现这种情况时,对于链接服务器,是由于目标服务器要求的加密与请求服务器的加密不匹配,所以无法建立连接。

要解决此问题,您可以尝试卸载计算机上所有相关 SQL 并重新安装...或者您可以尝试以下操作:

  1. 使用命令提示符/Powershell/Cortana,键入 'regedit' 并按回车键。
  2. 在 'Registry Editor,' 中导航到此位置...'HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer\Client\SNIxx.x'(“x”代表您的 SNI 版本..."Sql Network Interface")
  3. 先在以下位置备份文件夹,点击 'File/Export' 并将其保存在任何地方,'HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer\Client\'
  4. 无论你有什么版本的 SNI,在我的例子中是 11.0,你将在下面的文件数据中进行文件级搜索和替换,SNIxx.x,用你的版本号替换版本号。
  5. 现在在注册表编辑器中,单击 'File/Import' 并导航到您保存新文件的文件夹,双击它,或突出显示它并单击 'open'。

这是该文件中需要存在的数据...

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\ConnectTo]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\DB-Lib]
"AutoAnsiToOem"="ON"
"UseIntlSettings"="ON"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNIxx.x]
"ProtocolsSupported"=hex(7):73,00,6d,00,00,00,74,00,63,00,70,00,00,00,6e,00,70,  
00,00,00,76,00,69,00,61,00,00,00,00,00
"ProtocolOrder"=hex(7):73,00,6d,00,00,00,74,00,63,00,70,00,00,00,6e,00,70,00,  
00,00,00,00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNIxx.x\GeneralFlags]
"NumberOfFlags"=dword:00000002

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNIxx.x\GeneralFlags\Flag2]

"Label"="Trust Server Certificate"
"Value"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNIxx.x\LastConnect]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNIxx.x\np]
"DLLname"="SQLNCLI"
"NumberOfFlags"=dword:00000000
"NumberOfProperties"=dword:00000001
"ProtocolName"="Named Pipes"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNIxx.x\np\Property1]
"Name"="Default Pipe"
"Value"="sql\query"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNIxx.x\sm]
"DLLname"="SQLNCLI"
"NumberOfFlags"=dword:00000000
"NumberOfProperties"=dword:00000000
"ProtocolName"="Shared Memory"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNIxx.x\tcp]
"DLLname"="SQLNCLI"
"NumberOfFlags"=dword:00000000
"NumberOfProperties"=dword:00000003
"ProtocolName"="TCP/IP"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNIxx.x\tcp\Property1]
"Name"="Default Port"
"Value"=dword:00000599

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNIxx.x\tcp\Property2]
"Name"="KEEPALIVE (in milliseconds)"
"Value"=dword:00007530

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNIxx.x\tcp\Property3]
"Name"="KEEPALIVEINTERVAL (in milliseconds)"
"Value"=dword:000003e8

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNIxx.x\VIA]
"DLLname"="SQLNCLI"
"NumberOfFlags"=dword:00000000
"NumberOfProperties"=dword:00000002
"ProtocolName"="VIA"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNIxx.x\VIA\Property1]
"Name"="Default Server Port"
"Value"="0:1433"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\SNIxx.x\VIA\Property2]
"Name"="Default Client NIC"
"Value"="0"

我遇到了类似的问题。问题是我安装了旧版本的 SQL 工具,并且计算机路径仍然设置为在 110 版本之前引用 100 版本。

比如2008和2012都安装了

C:\Program Files\Microsoft SQL Server0\Tools\Binn

C:\Program Files\Microsoft SQL Server0\Tools\Binn

此处参考文件夹版本: SQL Server file names vs versions

我只是参考了较新的版本,问题就解决了。