报错信息
我的DataGrip是最新版,连接的sqlserver为2008R2版本,报错信息为:
DBMS: Microsoft SQL Server (版本 10.50.1600)
区分大小写: 普通形式=mixed,分隔形式=mixed
驱动程序: Microsoft JDBC Driver 8.2 for SQL Server (版本 8.2.2.0,JDBC4.2)
[08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]”。 ClientConnectionId:837d4f63-149f-4b26-8362-0b5dbacc88cf
The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]可能禁用了以下必需算法: SSLv3, TLSv1, TLSv1.1, DTLSv1.0, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, ECDH。编辑禁用算法的列表以纳入必需算法。您可以先尝试启用 TLSv1 或 TLSv1.1。.

处理方法:
先说处理方法,再说原因
1. 直接启用TLSv1
没错,你只需要点击【启用TLSv1】,然后你就不小心的发现,可以正确的连接了


2.其他方法【建议上方方法不顶用再尝试】
以下方法为AI推荐的方法,我还没试过大家酌情使用
方案 1:升级 SQL Server(根本解决)
-
SQL Server 2008 不支持 TLS 1.2,必须升级到 SQL Server 2016 及以上版本。
-
若暂时无法升级,可参考微软官方补丁,但 SQL Server 2008 已终止支持,无官方 TLS 1.2 补丁。
方案 2:修改客户端 JDK 配置(临时解决)
允许 DataGrip 使用 TLS 1.0:
-
找到 DataGrip 使用的 JDK 路径:
-
Windows:
C:\Users\<用户名>\AppData\Local\JetBrains\DataGrip<版本>\jbr\conf\security\java.security -
macOS:
/Applications/DataGrip.app/Contents/jbr/Contents/Home/conf/security/java.security
-
-
修改
java.security文件: 找到这一行:jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, DH keySize < 1024, ...改为:
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, ...(即 移除 TLSv1 和 TLSv1.1)
-
重启 DataGrip,再次连接。
方案 3:使用旧版 JDBC 驱动(辅助)
-
下载 Microsoft JDBC Driver 6.0/7.0 for SQL Server(支持 TLS 1.0)。
-
在 DataGrip 中手动指定该驱动:
-
File → Data Sources → Drivers → Microsoft SQL Server → 替换为旧版 jar
-
报错原因
处理完之后复盘一下报错的原因:【 SQL Server 2008 默认使用 TLS 1.0,而 DataGrip(或其内置 JDK)已禁用 TLS 1.0 和 TLS 1.1,只接受 TLS 1.2 或 TLS 1.3,导致协商失败。】就是DataGrip或者JDK认为TLS 1.0 和 TLS 1.1已经是陈旧的协议,安全性能较低,导致DataGrip在连接数据库中不再使用该协议,但是数据库因为是旧版本,只能通过这两旧的协议进行连接,因此发生了协议不通过的报错。要不就升级Sqlserver的版本,也就变相的升级了协议的版本,要不就让本地的JDK或者DataGrip支持使用有风险的协议。
3万+

被折叠的 条评论
为什么被折叠?



