链接服务器证书问题



我有两台SQL Server(2017(:A和B。Server_A没有证书,并且未启用加密。Server_B具有证书并且已启用加密。

登录到Server_A时:从[Server_B]中选择*。MyDB.dbo.MyTable--这适用于

登录到Server_B时:从[Server_A]中选择*。SomeDb.dbo.AnyTable--此操作失败,返回错误:

">OLE DB提供程序";SQLNCLI11";对于链接服务器";服务器A";返回的消息";客户端无法建立连接";。Msg-2146893019,级别16,状态1,第11行SSL提供程序:证书链是由不受信任的颁发机构颁发的";

这在我看来是倒退的。我认为第一个查询会失败,因为它源自一个没有证书的SQL Server。相反,具有证书的SQL Server在与"服务器"通信时失败;没有证书";服务器我想了解为什么这会以这种方式失败。此外,我必须做些什么才能使第二个查询成功?我怀疑在Server_a上安装证书会解决此问题。这听起来正确吗?

在服务器a上安装证书并不能解决问题。

如果你没有证书,你可以通过下面的查询获得带有相关证书的数据库列表

use master;
go
select
database_name = d.name,
dek.encryptor_type,
cert_name = c.name
from sys.dm_database_encryption_keys dek
left join sys.certificates c
on dek.encryptor_thumbprint = c.thumbprint
inner join sys.databases d
on dek.database_id = d.database_id;

一旦获得证书名称,就可以将其备份到文件夹中。

从这里开始,您必须对证书有所了解。每个证书都有一个";发卡机构";(签署证书的人(和/或链(由祖先中间人签署的中间路径,等等(当您查询数据库时,您的电脑会读取证书并验证链。

错误显示:

证书链是由不受信任的颁发机构颁发的">

这意味着:;我不信任证书,因为它是由我不信任的人发出的">

自签名证书的例外情况是,证书的颁发者本身没有链(单个节点(。

您必须打开证书并查看链。

在窗口上:

  1. 如果是自签名的,则在"上安装证书;可信根证书颁发机构">
  2. 如果不是自签名的,则必须查找链证书并将其安装在"上;可信根证书颁发机构">

在Linux上,我记不清了,你必须在谷歌上看看。

最大

谢谢你的回复。您的回答考虑了数据库级别的证书。事实上,当我查询sys.certificates系统目录时,它会返回用于TDE加密的证书。但是,我使用的证书用于服务器级别的传输层安全性(TLS(加密。但你的回答突出了错误">证书链是由不受信任的机构颁发的";这让我从不同的角度思考。你提到我需要"打开"证书。当我打开我导出的证书时,它表示无法验证。结果我导出错误。我的第二次出口尝试成功了。

当我重读MS文档时,我也意识到我错过了授予SQL Server服务帐户读取权限的步骤。一旦我这样做了链接服务器成功连接。总之,如果您的客户端是另一个SQL Server,则需要从目标服务器导出证书。导出的证书需要安装在具有服务帐户读取权限的客户端上。就是这样!

感谢Max为我提供了一些指导。

最新更新