IDEA / DataGrip 连接 SQL Server 提示“驱动程序无法通过 SSL 加密建立安全连接”的解决方法

🔍 问题描述

当你使用 IntelliJ IDEA 或 JetBrains DataGrip 连接 Microsoft SQL Server 数据库时,可能会遇到如下错误:

复制代码
[08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。
错误: "The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]"
ClientConnectionId: 46f72084-baa1-4196-a3a5-3b222ff3b621

这个错误意味着:

  • SQL Server 服务器 使用了较旧的加密协议(如 TLS 1.0)。
  • IDEA / DataGrip 的 JDBC 客户端(基于 Java)默认只接受更安全的协议(TLS 1.2 或 TLS 1.3)。
  • 双方无法协商出一个共同支持的安全协议版本,导致连接失败。

✅ 解决方案概览

方案 适用场景 安全性 推荐指数
1️⃣ 使用 jTDS 驱动连接 快速解决老系统连接问题 ⚠️ 中等 ⭐⭐⭐⭐⭐
2️⃣ 禁用 SSL 加密(测试环境) 内网/本地开发快速连接 ❌ 低 ⭐⭐⭐⭐☆
3️⃣ 修改 JVM 参数支持 TLS 1.0 临时兼容旧服务器 ⚠️ 中等 ⭐⭐⭐☆☆
4️⃣ 升级 SQL Server 支持 TLS 1.2+ 生产环境最佳实践 ✅ 高 ⭐⭐⭐⭐⭐
5️⃣ 更新 JDBC 驱动版本 提升兼容性与安全性 ✅ 高 ⭐⭐⭐⭐☆

🥇 方案一:使用 jTDS 驱动连接(最简单、最快捷)

推荐指数:★★★★★
适用场景:连接老旧 SQL Server 实例(如 2008 R2)、无法修改服务器配置、快速调试

💡 核心原理

IntelliJ IDEA 和 DataGrip 内置了两种 SQL Server 驱动:

  • Microsoft JDBC Driver(官方驱动):安全性高,但对 TLS 协议要求严格。
  • jTDS JDBC Driver(开源驱动):兼容性强,支持 TLS 1.0,能顺利连接老旧数据库。

由于 jTDS 对加密协议的要求较为宽松,它不会拒绝 TLS 1.0,因此可以成功建立连接。


✅ 操作步骤(以 DataGrip 为例)

  1. 打开数据库工具窗口:

    • 菜单栏 → ViewTool WindowsDatabase
  2. 添加新数据源:

    • 点击 +Data Source → 选择 Microsoft SQL Server (jTds)
  3. 填写连接信息:

    字段 示例值 说明
    Host 192.168.1.100 SQL Server 主机地址
    Port 1433 默认端口
    Database MyDB 要连接的数据库名
    User sa 或域账户 登录用户名
    Password ****** 密码
  4. (可选)在 Advanced 选项卡中设置 SSL 模式:

    • 找到 ssl 参数,设置为:
      • ssl = false:完全禁用加密
      • ssl = allow:尝试加密,失败则降级
      • ssl = require:强制加密(需服务器支持)
  5. 点击 Test Connection,看到绿色对勾 ✔️ 即表示连接成功!


⚠️ 注意事项

项目 说明
🛑 jTDS 已停止维护 最后稳定版为 1.3.1(2013 年发布),不再更新
🔐 不支持新特性 不支持 Always Encrypted、JSON、列存储索引等 SQL Server 2014+ 功能
📦 功能有限 元数据查询、事务隔离级别支持不如官方驱动完善
🔄 未来兼容风险 若服务器升级 TLS 或启用强加密策略,可能再次失效

结论 :jTDS 是一个优秀的"过渡方案",适合快速解决问题,但不建议长期用于生产环境


🥈 方案二:禁用 SSL 加密(适用于测试/内网环境)

推荐指数:★★★★☆
适用场景:本地开发、内网测试、临时调试

💡 核心原理

通过在连接参数中设置 encrypt=false,明确告诉 JDBC 驱动不要使用 SSL/TLS 加密,从而绕过协议协商失败的问题。


✅ 操作步骤

  1. 在 IDEA / DataGrip 中选择 Microsoft SQL Server(官方驱动)

  2. Advanced 选项卡中添加以下参数:

    复制代码
    encrypt = false

    或更完整地:

    复制代码
    encrypt = false; trustServerCertificate = true
    • encrypt=false:禁用 SSL 加密
    • trustServerCertificate=true:即使启用加密也自动信任证书(避免证书验证错误)
  3. 测试连接。


⚠️ 安全提醒

  • 数据明文传输:所有 SQL 查询和结果在网络中以明文形式传输,易被窃听。
  • 🔒 仅限可信网络:仅可在本地回环(localhost)、内网或防火墙保护的环境中使用。
  • 🚫 禁止用于生产环境

🥉 方案三:修改 JVM 参数支持 TLS 1.0(临时应急)

推荐指数:★★★☆☆
适用场景:必须使用官方驱动且无法更改服务器配置

💡 核心原理

Java 虚拟机(JVM)默认禁用了 TLS 1.0 和 1.1。我们可以通过启动参数强制客户端接受这些旧协议。


✅ 操作步骤

  1. 找到 DataGrip 的 vmoptions 文件:

    • Windows<DataGrip安装目录>\bin\datagrip64.vmoptions
    • macOS~/Library/Application Support/JetBrains/DataGrip<版本>/datagrip.vmoptions
    • Linux~/.config/JetBrains/DataGrip<版本>/datagrip64.vmoptions
  2. 在文件末尾添加:

    properties 复制代码
    -Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3

    或:

    properties 复制代码
    -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
  3. 保存并重启 DataGrip。


⚠️ 风险提示

  • ⚠️ 降低安全性:TLS 1.0 存在已知漏洞(如 POODLE),已被 PCI-DSS 等标准禁用。
  • 🧼 临时使用:建议仅作为短期过渡手段,尽快升级服务器。

🏅 方案四:升级 SQL Server 支持 TLS 1.2+(根本性解决方案)

推荐指数:★★★★★
适用场景:生产环境、安全合规要求高、长期维护系统

💡 核心原理

让服务器支持现代加密协议(TLS 1.2 或 1.3),与客户端达成安全协商,实现端到端加密通信


✅ 实施步骤

1. 确认 SQL Server 版本支持
  • SQL Server 2012 及以上版本均支持 TLS 1.2。

  • 查看版本命令:

    sql 复制代码
    SELECT @@VERSION;
2. 在 Windows 服务器上启用 TLS 1.2
3. 验证 TLS 状态
  • 使用 OpenSSL 测试:

    bash 复制代码
    openssl s_client -connect your-sql-server:1433 -tls1_2
  • 或使用 PowerShell:

    powershell 复制代码
    [System.Net.SecurityProtocolType]::Tls12

✅ 优点

  • ✅ 安全合规(符合等保、GDPR、PCI-DSS)
  • ✅ 性能更好(TLS 1.2+ 更高效)
  • ✅ 兼容现代客户端

🥈 方案五:更新 JDBC 驱动版本

推荐指数:★★★★☆
适用场景:提升兼容性、修复已知 Bug

✅ 操作建议

  1. 前往官网下载最新 Microsoft JDBC Driver:

    🔗 https://learn.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server

  2. 当前最新稳定版为 JDBC Driver 12.4 for SQL Server(2024 年发布)

  3. 在 DataGrip 中替换驱动:

    • 打开 Driver 设置(DatabaseDriver
    • 移除旧驱动 jar 包
    • 添加新版本的 mssql-jdbc-12.4.x.jar
    • 重新测试连接

📊 五种方案对比总结

方案 易用性 安全性 长期可用性 推荐场景
1. 使用 jTDS 驱动 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐ 快速连接老系统
2. 禁用 SSL ⭐⭐⭐⭐☆ 内网调试
3. 修改 JVM 参数 ⭐⭐⭐☆☆ ⭐⭐ ⭐⭐ 临时应急
4. 升级服务器 TLS ⭐⭐☆☆☆ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ 生产环境
5. 更新 JDBC 驱动 ⭐⭐⭐☆☆ ⭐⭐⭐⭐ ⭐⭐⭐⭐ 日常维护

📌 最佳实践建议

场景 推荐做法
本地开发 / 内网测试 使用 jTDS 或 encrypt=false 快速连接
生产环境部署 必须启用 TLS 1.2+,使用官方驱动
老旧系统迁移中 先用 jTDS 连通,逐步升级服务器
安全审计要求高 禁用 TLS 1.0/1.1,启用证书验证

🧪 附:验证连接状态的 SQL 查询

连接成功后,可通过以下 SQL 查看当前会话的加密状态:

sql 复制代码
SELECT 
    session_id,
    encrypt_option,
    auth_scheme
FROM sys.dm_exec_connections 
WHERE session_id = @@SPID;
  • encrypt_option = TRUE 表示连接已加密
  • auth_scheme = NTLMKERBEROS 表示认证方式
相关推荐
BullSmall9 小时前
第三方软件安全-Dependency‑Track Docker 部署
安全·docker·容器
AImatters9 小时前
国产算力底座,支撑油气储运数字化迈过关键分水岭
安全·cpu·算力·海光·油气储运
それども11 小时前
IDEA接入Claude完整流程
java·ai·intellij-idea
叠叠乐12 小时前
中国移动家庭云电脑window关闭所有安全脚本
安全
Jmyd012312 小时前
实训室的 3D 模型涉及肖像文物,数据安全与合规怎么做?
安全·3d·数据安全·虚拟实训
芯盾时代12 小时前
《金融业网络安全管理办法(征求意见稿)》全条款深度拆解(三)
网络·安全·网络安全
敢敢是只喵i13 小时前
一个本地 AI Agent 要操作多个门店或 SaaS 账号,应该怎样安全切换身份?
人工智能·安全·ai·系统架构·业界资讯
Acrel123414 小时前
DC800V 大规模落地,算力机房安全该如何保障
安全
其实防守也摸鱼15 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透
深圳海导科技15 小时前
资产防盗追踪系统:物联网高价值资产安全管理|海导科技navynav
科技·物联网·安全