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

PySpark连接SQL Server报TLS10协议不被接受如何不修改服务端解决

问题说明

报错信息如下:

The server selected protocol version TLS10 is not accepted by client preferences [TLS12]

该报错的根因是本地JDK默认禁用了TLS1.0协议,而目标SQL Server服务端仅支持TLS1.0版本完成握手,无需修改服务端的前提下可通过以下方案解决:

方案1:修改JDBC连接参数(优先级最高,仅需修改代码)

直接在JDBC连接URL中新增TLS协议兼容参数,修改后的代码如下:

jdbcDF = spark.read \
   .format("jdbc") \
   .option("url","jdbc:sqlserver://<host>\\<port>;database=<database>;enabledTLSProtocols=TLSv1,TLSv1.1,TLSv1.2;sslProtocol=TLS;") \
   .option("dbtable", <table>) \
   .option("user", <username>) \
   .option("password", <password>) \
   .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
   .load()

如果连接仍报错,可以额外在URL中添加encrypt=false;trustServerCertificate=true;参数,跳过证书校验环节。

方案2:修改JDK安全配置(永久生效,适合本地开发场景)

找到PySpark环境使用的JDK安装路径,进入jre/lib/security目录,编辑java.security文件:

  • 找到jdk.tls.disabledAlgorithms配置行
  • 删除该行中的TLSv1、TLSv1.1条目,保存后重启PySpark进程即可
方案3:Spark启动时传入JVM参数(无需修改代码和全局配置文件)

启动pyspark或者提交Spark任务时,新增JVM参数覆盖TLS禁用规则,命令示例:

pyspark --conf spark.driver.extraJavaOptions="-Djdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL"

如果是在代码中初始化SparkSession,可以在构建时添加该配置:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("SQLServerConn") \
    .config("spark.driver.extraJavaOptions", "-Djdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL") \
    .getOrCreate()

内容的提问来源于stack exchange,提问作者Cristian Ispan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 17:36:09