我在从Azure网站连接我的DB时遇到了一个错误,它是在虚拟机角色(我有SQL虚拟机角色)。VM Role和Azure Website都在West zone。我面临着以下问题:

SqlException (0x80131904):成功建立了与服务器的连接,但是在登录过程中发生了错误。(提供者:SSL提供者,错误:0 -证书链是由一个不受信任的机构颁发的。)]

我可以使用SSMS连接到我的DB。虚拟机角色的1433端口是开放的。 我的连接有什么问题?


当前回答

从IIS访问SQLServer时遇到同样的问题。添加TrustServerCertificate=True没有帮助。

可以在MS文档中看到一条注释:确保SQLServer服务帐户可以访问您正在使用的TLS证书。(NT服务\ MSSQLSERVER)

打开个人存储,右键单击证书->管理私钥->添加SQL服务帐户并给予完全控制。

重新启动SQL服务。它工作。

其他回答

我决定添加另一个答案,因为这篇文章会作为这个错误的第一个谷歌结果弹出。

如果你在2022年1月之后得到这个错误,可能是在从System.Data.SqlClient迁移到Microsoft.Data.SqlClient之后,或者只是将Microsoft.Data.SqlClient更新到4.0.0或更高版本之后,这是因为MS引入了一个破坏性的更改:

https://learn.microsoft.com/sql/connect/ado-net/introduction-microsoft-data-sqlclient-namespace?view=sql-server-ver15#breaking-changes-in-40

Breaking changes in 4.0 Changed Encrypt connection string property to be true by default. The default value of the Encrypt connection setting has been changed from false to true. With the growing use of cloud databases and the need to ensure those connections are secure, it's time for this backwards-compatibility-breaking change. Ensure connections fail when encryption is required In scenarios where client encryption libraries were disabled or unavailable, it was possible for unencrypted connections to be made when Encrypt was set to true or the server required encryption.

此更改是在2021年8月的SqlClient拉取请求中进行的,其中有关于此更改的额外讨论。

快速解决方法是在连接字符串中添加Encrypt=False。

从ssms客户端本身也可以实现同样的功能。只需打开ssms,插入服务器名称,然后从标题连接属性下的选项确保信任服务器证书被选中。

"ConnectionStrings": {
    "DefaultConnection": "Server=DESKTOP-O5SR0H0\\SQLEXPRESS;Database=myDataBase;Trusted_Connection=True;TrustServerCertificate=True;"
  }
}

当我试图连接到托管在谷歌云平台上的MS SQL Server实例时,在连接属性选项卡下使用SSMS未选中信任服务器证书时,我得到了相同的错误。通过将GCP提供的证书授权导入到本地计算机的“受信任的根证书颁发机构”列表,我成功信任了该证书。

在这里阅读完整的描述和解决方案。

如果尝试使用SSMS连接时看到此错误消息,请将TrustServerCertificate=True添加到附加连接参数中。