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

Azure Databricks用Key Vault机密配置JDBC连接Azure SQL登录失败怎么办

问题修复方案

错误原因

当前代码的错误根源是直接将Azure Key Vault中存储的机密名称作为字符串传入了连接配置,没有从Databricks机密作用域中读取对应的实际机密值,导致SQL Server接收到的登录账号为字符串jdbcusername而非真实的数据库用户名,最终触发登录失败报错。

修复步骤

  • 使用Databricks内置的dbutils.secrets.get()方法从指定机密作用域读取机密值,该方法的两个入参分别为机密作用域名称、机密名称。
  • 将读取到的真实用户名、密码赋值给properties配置中的对应字段即可。

修正后的完整代码

from pyspark.sql import *
import pandas as pd

# 读取parquet文件
outerjoindfparquet = spark.read.format('parquet').load('dbfs:/newjouterjoindfparquet.parquet')
display(outerjoindfparquet)

# 写入Parquet数据到Azure SQL数据库
mountdatabricksjdbcHostname = "sql-ja-dev.database.windows.net"
jdbcPort = "1433"
jdbcDatabase = "sqldb-ja-dev"
# 从机密作用域secretscopeadbr读取真实的账号密码
jdbc_username = dbutils.secrets.get(scope="secretscopeadbr", key="jdbcusername")
jdbc_password = dbutils.secrets.get(scope="secretscopeadbr", key="jdbcpassword")
properties = {
        "user": jdbc_username,
        "password": jdbc_password
    }
url = "jdbc:sqlserver://{0}:{1};database={2}".format(mountdatabricksjdbcHostname, jdbcPort, jdbcDatabase)

# 直接使用已读取的DataFrame写入,无需重复读Parquet减少IO开销
filedf1 = DataFrameWriter(outerjoindfparquet)
filedf1.jdbc(url=url, table="Fact_SalesOrder", mode="overwrite", properties=properties)

额外校验项

如果修改代码后仍存在报错,可按以下顺序排查:

  • 临时运行print(dbutils.secrets.get(scope="secretscopeadbr", key="jdbcusername"))验证是否能正常读取到用户名(仅用于排查问题,请勿在生产环境打印任何机密信息)
  • 确认Azure Key Vault中存储的jdbcusername、jdbcpassword值与Azure SQL的合法登录凭据完全一致
  • 确认Databricks工作区的托管身份对Azure Key Vault分配有**机密获取(Get Secret)**的访问权限
  • 确认当前Notebook的运行用户拥有secretscopeadbr机密作用域的访问权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:45:04