Databricks JDBC连接失败返回403状态码,求故障原因
Azure Databricks JDBC连接403错误原因分析
问题场景
尝试通过Java JDBC连接Azure Databricks,代码如下:
package digital.eComm.ui.tests; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DatabricksSetup { public static void main(String[] args) throws SQLException { String url = "jdbc:databricks://XXXX.azuredatabricks.net:443/default;transportMode=http;ssl=1;httpPath=sql/protocolv1/o/XXXXX;AuthMech=3;UID=token;PWD=XXXXXX"; String username = "token"; String password = "XXXX"; //Token generated from databricks profile page. Connection connection = DriverManager.getConnection(url, username, password); System.out.println("Database connected!"); if (connection != null) { System.out.println("Connection Established"); } else { System.out.println("Connection Failed"); } } }
已添加的依赖:
"com.databricks:databricks-jdbc:2.6.25"
运行后抛出异常:
Exception in thread "main" java.sql.SQLException: [Databricks][DatabricksJDBCDriver](500593) Communication link failure. Failed to connect to server. Reason: HTTP Response code: 403, Error message: Unknown. at com.databricks.client.hivecommon.api.HS2Client.handleTTransportException(Unknown Source) at com.databricks.client.spark.jdbc.DowloadableFetchClient.handleTTransportException(Unknown Source) at com.databricks.client.hivecommon.api.HS2Client.openSession(Unknown Source) at com.databricks.client.hivecommon.api.HS2Client.<init>(Unknown Source) at com.databricks.client.spark.jdbc.DowloadableFetchClient.<init>(Unknown Source) at com.databricks.client.spark.jdbc.DownloadableFetchClientFactory.createClient(Unknown Source) at com.databricks.client.hivecommon.core.HiveJDBCCommonConnection.connectToServer(Unknown Source) at com.databricks.client.spark.core.SparkJDBCConnection.connectToServer(Unknown Source) at com.databricks.client.hivecommon.core.HiveJDBCCommonConnection.establishConnection(Unknown Source) at com.databricks.client.spark.core.SparkJDBCConnection.establishConnection(Unknown Source) at com.databricks.client.jdbc.core.LoginTimeoutConnection.connect(Unknown Source) at com.databricks.client.jdbc.common.BaseConnectionFactory.doConnect(Unknown Source) at com.databricks.client.jdbc.common.AbstractDriver.connect(Unknown Source) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:247) at digital.eComm.ui.tests.DatabricksSetup.main(DatabricksSetup.java:16) Caused by: com.databricks.client.support.exceptions.ErrorException: [Databricks][DatabricksJDBCDriver](500593) Communication link failure. Failed to connect to server. Reason: HTTP Response code: 403, Error message: Unknown. ... 16 more
错误原因分析
HTTP 403状态码代表权限禁止访问,结合Databricks JDBC连接场景,可能的原因包括:
- Token无效或权限不足:生成的个人访问令牌(PAT)可能已过期、被撤销,或者没有足够的权限访问指定的Databricks集群/SQL仓库。需确认令牌权限范围,至少需要
sql_access或all权限。 - URL参数错误:
httpPath参数不正确:需确认是对应SQL仓库或集群的正确HTTP路径。集群路径格式为sql/protocolv1/o/<org-id>/<cluster-id>,SQL仓库路径需从仓库详情页复制完整路径。- 认证参数重复传递:URL中已包含
UID=token;PWD=XXXXXX,同时又通过getConnection方法传入username和password,可能导致认证冲突。建议只保留一种传递方式。
- 网络或防火墙限制:运行代码的环境无法访问Azure Databricks端点,或者IP地址未被加入Databricks工作区的允许列表,导致请求被拦截返回403。
- JDBC驱动版本问题:使用的
databricks-jdbc:2.6.25版本较旧,可能存在兼容性问题,建议升级到最新稳定版本。
内容的提问来源于stack exchange,提问作者SeleniumUser
相关产品推荐
相关产品推荐

