You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中使用DBI包禁用ODBC连接的SSL加密?

解决ODBC Driver 18连接SQL Server 2014的SSL协议不兼容问题

核心问题原因

ODBC Driver 18 for SQL Server默认强制启用加密,且默认禁用了TLS 1.0/1.1这类旧协议;而SQL Server 2014默认仅支持TLS 1.0/1.1,导致握手时出现协议不支持的错误。同时你需要明确禁用SSL认证,需调整连接参数或Driver配置。

解决方法

方法1:调整ODBC Driver 18的连接参数与系统配置

步骤1:修改R连接代码

取消注释TrustServerCertificate = "yes",确保Encrypt = "no"生效,完整连接代码如下:

library(dplyr)
library(dbplyr)
library(odbc)
library(DBI)

DBI_Connection <- dbConnect(odbc(),
                  Encrypt = "no",
                  TrustServerCertificate = "yes",
                  Driver = "ODBC Driver 18 for SQL Server",
                  server = "192.168.0.240",
                  database = "database",
                  uid = "user",
                  pwd = "pass",
                  Port = 1433)

test <- tbl(DBI_Connection, "I07_PARD")
glimpse(test)

步骤2:配置Driver允许旧TLS协议

根据你的操作系统调整:

  • Windows:
    打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ODBC Driver 18 for SQL Server,添加两个DWORD值:
    • DisableCertificateVerification:设为1
    • TLSProtocol:设为0x0000000A(允许TLS 1.0和TLS 1.1)
  • Linux/macOS:
    修改odbcinst.ini文件(路径通常为/etc/odbcinst.ini或~/.odbcinst.ini),在[ODBC Driver 18 for SQL Server]小节添加:
    TLSProtocol=TLSv1.0,TLSv1.1
    

方法2:改用ODBC Driver 17 for SQL Server

ODBC Driver 17默认不强制加密,对SQL Server 2014兼容性更好,无需额外系统配置。只需修改连接代码中的Driver名称:

DBI_Connection <- dbConnect(odbc(),
                  Encrypt = "no",
                  Driver = "ODBC Driver 17 for SQL Server",
                  server = "192.168.0.240",
                  database = "database",
                  uid = "user",
                  pwd = "pass",
                  Port = 1433)

可选:服务器端升级TLS版本(推荐长期方案)

如果需要保留加密功能,可给SQL Server 2014安装SP2及以上补丁,然后在服务器端启用TLS 1.2,这样ODBC Driver 18就能正常使用加密连接,无需兼容旧协议。


内容的提问来源于stack exchange,提问作者Lukas Kondrusevičius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:02:05