You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL Server升级至TLS 1.2后R语言ODBC连接失败求助

解决RODBC连接TLS 1.2加密SQL Server的问题

你的问题核心在于旧版ODBC SQL Server驱动不支持TLS 1.2——你之前用的{SQL Server}驱动是微软的旧版遗留驱动,本身就没有实现TLS 1.2的加密支持,所以当SQL Server升级后强制要求TLS 1.2连接时,就会抛出SSL安全错误。下面是几个经过验证的可行解决方案:

1. 更换为支持TLS 1.2的ODBC驱动

这是最根本的解决办法,微软目前推荐使用ODBC Driver 17 for SQL Server(或更高版本),它完全适配TLS 1.2加密协议。你需要下载和你的R版本(32/64位)匹配的驱动安装包完成安装。

安装后直接修改连接字符串,替换驱动名称即可:

dbhandle <- odbcDriverConnect("Driver={ODBC Driver 17 for SQL Server};Server=MHPOPMMSS100;Database=REZNKWB01;Trusted_Connection=Yes")

2. 改用odbc包替代RODBC

RODBC是比较老旧的包了,tidyverse生态下的odbc包对新驱动的支持更完善,连接逻辑更清晰,稳定性也更好。使用示例如下:

library(odbc)
# 建立连接
con <- dbConnect(odbc(),
                 Driver = "ODBC Driver 17 for SQL Server",
                 Server = "MHPOPMMSS100",
                 Database = "REZNKWB01",
                 Trusted_Connection = "Yes")
# 操作完成后记得关闭连接
dbDisconnect(con)

3. 确认客户端系统TLS 1.2设置

虽然SQL Server升级后通常会自动开启系统的TLS 1.2支持,但可以检查一下你的客户端电脑是否已经正确启用:

  • 打开注册表编辑器,导航到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
  • 确保Enabled的DWORD值设为1DisabledByDefault的DWORD值设为0
  • 如果没有对应键值,可以手动创建这些项和参数

不推荐的临时测试方案

如果你暂时无法安装新驱动,仅用于临时测试的话,可以在SQL Server端临时启用TLS 1.0/1.1(但这会降低数据库安全性,绝对不建议长期使用):

  • 打开SQL Server配置管理器,找到SQL Server网络配置 -> 你的实例协议 -> TCP/IP -> 属性
  • 在“证书”选项卡确认SSL设置,再到“标志”选项卡调整支持的TLS版本

内容的提问来源于stack exchange,提问作者Adam Sanders

火山引擎 最新活动