实体框架中 SqlClient 的 SqlServer 2008R2 连接问题
Posted
技术标签:
【中文标题】实体框架中 SqlClient 的 SqlServer 2008R2 连接问题【英文标题】:SqlServer 2008R2 Connection Problem with SqlClient in Entity Framework 【发布时间】:2021-10-13 08:35:51 【问题描述】:从旧版本的实体框架(核心 3)升级到这个之后:
Microsoft.EntityFrameworkCore.SqlServer/5.0.2
只有当我从我的 Docker 容器(在 asp.net core.5 中)连接到删除的 SqlServer 2008R2 时,我才开始收到连接错误。当我通过在 Azure 上创建新的 sqlerver 目录进行测试并进行相同的连接测试时,我没有收到错误消息(请参阅下面的错误消息)。
不幸的是,我正在使用无法升级 2008R2 的托管服务,并且我知道它已经过时,但仍然希望有一种解决方法可以让我使用它来使其正常工作。主机不会将任何新补丁应用到服务器(即使它们由于生命周期结束而可用)。
下面是我的连接字符串,它可以从我的 linux docker 实例连接到 sql azure,但在连接到 2008R2 时不起作用。
Server=tcp:mysite.com,1433,1433;Initial Catalog=dbcatalog1;Persist Security Info=False;User ID=user1;Password=passwordhere;MultipleActiveResultSets=False;Encrypt=False;TrustServerCertificate=False;Connection Timeout=30;
这是我遇到的错误
Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: SSL Provider, error: 31 - Encryption(ssl/tls) handshake failed)\n","stream":"stdout","time":"2021-08-07T
18:53:54.515357149Z"
【问题讨论】:
不确定这是根本原因,但这个tcp:mysite.com,1433,1433
是错误的。端口不应指定两次。很可能是服务器强制加密,但客户端和服务器不共享任何加密套件。
感谢@DavidBrowne-Microsoft,它实际上不在我的真实代码中,但无论如何我都仔细检查了。还是一样的问题。我认为这与这个问题 TLS 1.2 和 linux 有关。我不想降级 TLS。 ***.com/questions/66445221/…
您的 SQL Server 2008R2 机器可能没有 TLS 1.2。
是的,它设置了 TLS 1.2。
【参考方案1】:
在最新的Microsoft.Data.SqlClient中是一个突破性的变化,设置
Trust Server Certificate=true
【讨论】:
可悲的是,同样的错误。这是我更新的连接字符串。有什么文档可以指点我吗?我读到 TrustServerCertificate 带有我认为我已经满足的自己的要求。 :Server=tcp:xxx.com,1433,1433;Initial Catalog=xxx;Persist Security Info=False;User ID=xx;Password=xx;MultipleActiveResultSets=False;Encrypt=False;TrustServerCertificate=true;Connection Timeout=30; 顺便说一句 @ErikEJ,我确实发现了您在 github.com/dotnet/SqlClient/issues/690 上评论的问题,我试图删除端口 1433(只是将其排除在外),但我仍然遇到同样的错误。 然后我认为这几乎是我的确切问题,但奇怪的是我的服务器上确实安装了 tls 1.2。 ***.com/questions/66445221/… 我认为您的服务器必须运行 SP4以上是关于实体框架中 SqlClient 的 SqlServer 2008R2 连接问题的主要内容,如果未能解决你的问题,请参考以下文章
实体框架(Web API)中的 System.Data.SqlClient.SqlException
找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序。
找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序。
找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序
实体框架 6 错误服务器版本:(System.Data.SqlClient.SqlConnection)customerOrderContext.Database.Connection).Server