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

如何在Azure Databricks中通过Windows认证连接Azure SQL Server并解决连接报错

解决Azure Databricks通过Windows认证连接SQL Server的问题

先排查基础连接故障

报错核心是TCP/IP连接失败,先确认以下前置条件:

  • 确认SQL Server实例已开启TCP/IP协议,且监听1433端口
  • 检查数据库服务器防火墙,允许Azure Databricks所在IP段访问1433端口
  • 确保JDBC使用的hostname正确(公网环境用服务器FQDN,同VNet内网可用私有IP/内网FQDN)

正确连接代码(分场景)

场景1:Databricks与SQL Server在同一Azure VNet(推荐)

同VNet内可直接用集成Windows认证,需确保Databricks集群的服务主体拥有SQL Server访问权限:

jdbcHostname = "你的服务器FQDN或内网IP"
jdbcPort = "1433"
jdbcDatabase = "目标数据库名"

# 构造集成认证的JDBC地址
jdbcUrl = f"jdbc:sqlserver://{jdbcHostname}:{jdbcPort};database={jdbcDatabase};integratedSecurity=true;authenticationScheme=JavaKerberos"

connectionProperties = {
    "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}

# 读取数据库表数据
jdbcDF = spark.read.jdbc(url=jdbcUrl, table="目标表名", properties=connectionProperties)

场景2:公网连接,用Azure AD认证替代原生Windows认证

公网环境下原生Windows认证稳定性差,推荐用Azure AD服务主体认证:

jdbcHostname = "你的服务器公网FQDN"
jdbcPort = "1433"
jdbcDatabase = "目标数据库名"
aadClientId = "你的服务主体Client ID"
aadSecret = "你的服务主体密钥"
aadTenant = "你的Azure租户ID"

# 构造Azure AD认证的JDBC地址
jdbcUrl = f"jdbc:sqlserver://{jdbcHostname}:{jdbcPort};database={jdbcDatabase};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;authentication=ActiveDirectoryServicePrincipal"

connectionProperties = {
    "user": aadClientId,
    "password": aadSecret,
    "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}

# 读取数据库表数据
jdbcDF = spark.read.jdbc(url=jdbcUrl, table="目标表名", properties=connectionProperties)

关键注意事项

  • 集成认证模式下不需要手动传入username和password,避免参数冲突
  • 公网环境优先使用Azure AD认证,兼容性远高于原生Windows认证
  • 确保Databricks集群使用的Runtime已预装最新版SQL Server JDBC驱动(若未预装可手动上传驱动包)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:00:01