无法通过 windows 2012 上的系统 dsn 使用 ODBC 连接连接到 SQL Server 2008

Unable to connect to SQL Server 2008 using ODBC connection via system dsn on windows 2012

我有 Windows 2012 服务器,我可以通过 Visual Studio Server Explorer 通过创建数据连接连接到 SQL Server 2008 实例。我还可以使用 SQL Server Management Studio 并连接到那个 SQL 服务器。但出于某种原因,当我尝试使用 ODBC 数据源管理器进行连接以设置 DSN 时,出现以下错误。

Connection Failed:
SQLState: '01000'
SQL Error: 1
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (SECCreateCredentials()).
Connection failed:
SQLState: '08001'
SQL Error: 18
[Microsoft][ODBC SQL Server Driver][DBNETLIB]SSL Security error

我似乎找不到任何关于这个的具体信息,想知道是否有人熟悉这个问题。

我要补充一点,客户端和服务器都不强制加密,所以我有点困惑,因为我会收到 ssl 相关错误。

打开 ODBC 日志记录后收到事件消息
创建 SSL 客户端凭据时发生致命错误。内部错误状态为 10013。

这并没有让我找到确切的问题,但确实让我从类似的错误中找到了修复方法。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client\ Enabled 需要从 0 翻转到 1

启用以下 本地安全策略 --> 本地策略 --> 安全选项 --> ‘系统加密:使用符合 FIPS 的算法进行加密、散列和签名

和运行 gpupdate /force

如果您的 SQL 服务器禁用了 TLS 1.0 和 TLS 1.1(这是一种很好的安全措施),您可能需要在客户端计算机上禁用它。我有一台 Win 2012 R2 服务器,有这个问题。

在注册表中:

HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\ ...
 \TLS1.0\Client (and Server): set DisabledByDefault = 1, Enabled = 0
 \TLS1.1\Client (and Server): set DisabledByDefault = 1, Enabled = 0

您可能需要重新启动计算机才能使设置生效。

在 Windows Server 2016 和 SQL Server 2016 上,我禁用了 TLS 1.0 和 1.1,并且只有一个旧站点出现问题(服务器上的其他较新的网站运行正常)。

我尝试将目标版本从 4.0 更新到 4.7,但没有解决问题。

问题是一些使用 OleDbDataReader 调用数据库的非常旧的代码,我将其升级为使用 SqlDataReader 并且成功了。

在其他地方找不到这个,所以认为 post 将来可能会对其他人有所帮助...