我在从Azure网站连接我的DB时遇到了一个错误,它是在虚拟机角色(我有SQL虚拟机角色)。VM Role和Azure Website都在West zone。我面临着以下问题:
SqlException (0x80131904):成功建立了与服务器的连接,但是在登录过程中发生了错误。(提供者:SSL提供者,错误:0 -证书链是由一个不受信任的机构颁发的。)]
我可以使用SSMS连接到我的DB。虚拟机角色的1433端口是开放的。 我的连接有什么问题?
我在从Azure网站连接我的DB时遇到了一个错误,它是在虚拟机角色(我有SQL虚拟机角色)。VM Role和Azure Website都在West zone。我面临着以下问题:
SqlException (0x80131904):成功建立了与服务器的连接,但是在登录过程中发生了错误。(提供者:SSL提供者,错误:0 -证书链是由一个不受信任的机构颁发的。)]
我可以使用SSMS连接到我的DB。虚拟机角色的1433端口是开放的。 我的连接有什么问题?
当前回答
我在实体框架迁移中得到了这个消息。我能够与Win Auth连接到Sql Server,并手动创建表。但EF行不通。这个连接字符串终于工作了
Server=MyServerName;Database=MyDbName;Trusted_Connection=SSPI;Encrypt=false;TrustServerCertificate=true
其他回答
如果尝试使用SSMS连接时看到此错误消息,请将TrustServerCertificate=True添加到附加连接参数中。
如果您试图通过Visual Studio 2015中的数据连接访问它,并得到上述错误,那么转到高级并设置 TrustServerCertificate = True 让错误消失。
我决定添加另一个答案,因为这篇文章会作为这个错误的第一个谷歌结果弹出。
如果你在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。
如果您正在使用答案中提到的任何连接属性,如果true/false似乎不起作用,则接受的值为yes/no。
TrustServerCertificate -接受字符串“yes”和“no”作为值。默认值为“no”,表示验证服务器证书。
使用ODBC 18.0 -希望它有帮助。
连接字符串属性
在把一个项目从。net 5迁移到。net 6之后,我也遇到了同样的问题。我尝试了建议的解决方案(TrustServerCertificate=True或Encrypt=False),它们按预期工作,但我有一个限制,不能更改连接字符串。因此,如果是这种情况,您仍然可以使用System.Data.SqlClient作为nuget包。就像这里解释的那样,它仍然被维护,但所有新的东西都将进入Microsoft.Data.SqlClient。