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

Databricks PySpark连接Azure SQL DB报错:身份验证值无效

解决Databricks通过PySpark连接Azure SQL DB的认证错误

1. 修正JDBC认证参数

你当前使用的ActiveDirectoryManagedIdentity并非sqljdbc 12.2版本支持的有效值,该版本中Azure托管标识的正确认证参数为ActiveDirectoryMSI。修改后的connectionProperties如下:

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

2. 确认托管标识权限

  • 确保Databricks集群使用的托管标识(系统分配或用户分配)已被添加为Azure SQL DB的数据库用户,并授予对应数据访问权限(如db_datareader用于读取数据)。
  • 可通过Azure SQL查询编辑器执行以下语句完成授权:
CREATE USER [你的托管标识名称] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [你的托管标识名称];

3. 适配用户分配托管标识的URL配置

若使用用户分配的托管标识,需要在JDBC URL中额外指定msiClientId参数:

jdbcUrl = "jdbc:sqlserver://{0}:{1};database={2};msiClientId=你的MSI客户端ID".format(jdbcHostname, jdbcPort, jdbcDatabase)

4. 其他可选认证方案(若MSI仍失败)

方式一:Active Directory服务主体认证

connectionProperties={
  "authentication":"ActiveDirectoryServicePrincipal",
  "user":"你的服务主体客户端ID",
  "password":"你的服务主体密钥",
  "driver" : "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}

需提前将服务主体添加为Azure SQL DB用户并授予对应权限。

方式二:Databricks Secrets存储凭证(避免硬编码)

将服务主体密钥或SQL账号密码存入Databricks密钥管理器,再通过代码调用:

secrets_scope = "你的密钥范围名称"
client_id = dbutils.secrets.get(scope=secrets_scope, key="sp-client-id")
client_secret = dbutils.secrets.get(scope=secrets_scope, key="sp-client-secret")

connectionProperties={
  "authentication":"ActiveDirectoryServicePrincipal",
  "user":client_id,
  "password":client_secret,
  "driver" : "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}

5. 验证驱动部署状态

确认Databricks集群的"库"页面已成功加载sqljdbc_12.2.0.0_enu版本的JAR包,避免因驱动缺失导致连接失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:25:06