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

Posted

技术标签:

【中文标题】无法通过 Windows 2012 上的系统 dsn 使用 ODBC 连接连接到 SQL Server 2008【英文标题】:Unable to connect to SQL Server 2008 using ODBC connection via system dsn on windows 2012 【发布时间】:2015-04-14 21:28:14 【问题描述】:

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

连接失败: SQLState: '01000' SQL 错误:1 [Microsoft][ODBC SQL Server 驱动程序][DBNETLIB]ConnectionOpen (SECCreateCredentials())。 连接失败: SQLState: '08001' SQL 错误:18 [Microsoft][ODBC SQL Server 驱动程序][DBNETLIB]SSL 安全错误

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

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

【问题讨论】:

【参考方案1】:

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

这并没有让我找到确切的问题,但确实让我解决了类似的错误。

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

【讨论】:

谢谢!浪费了我一天中的大部分时间来解决这个问题。现在,正在寻找一种启用 TLS 1.2 的方法,而不必启用打开此漏洞。 有关 TLS 1.2 和 Sql Server 的信息:dba.stackexchange.com/questions/93127/…【参考方案2】:

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

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

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

在其他任何地方都没有找到这个,所以认为这里的帖子将来可能会帮助其他人......

【讨论】:

【参考方案3】:

如果您的 SQL Server 上禁用了 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

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

【讨论】:

【参考方案4】:

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

并运行 gpupdate /force

【讨论】:

以上是关于无法通过 Windows 2012 上的系统 dsn 使用 ODBC 连接连接到 SQL Server 2008的主要内容,如果未能解决你的问题,请参考以下文章

Mac 使用Microsoft Remote Desktop无法连接至远程服务器,显示无法验证身份

我无法在我的系统 windows 7 32 位上的 XAMPP 上启动 Apache

Windows 7 上的 VB6 应用程序无法访问映射驱动器

Windows Server 2012 AD DS环境下域用户自动加入本地管理员组

无法从 python-ldap 连接到 Windows Server 2016 上的 ldaps

Windows Server 2012(单林多树多站点)AD 部署系列创建子域