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

在Databricks中使用Python获取Azure托管标识令牌

在Databricks中通过托管标识连接SQL Server(含令牌获取示例)

可行性说明

完全可行。在Azure Databricks环境中,你可以借助Azure托管标识(系统分配或用户分配类型)获取访问Azure SQL Server的令牌,全程无需硬编码凭据,安全性更高。

一、Python手动获取托管标识令牌示例

如果需要在自定义场景中手动获取令牌,可调用Databricks内置的元数据服务接口实现:

import requests

# 目标资源为Azure SQL Server的标准资源ID
resource_id = "https://database.windows.net/"
token_request_url = f"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource={resource_id}"

# 请求头必须携带Metadata标识
headers = {"Metadata": "true"}
response = requests.get(token_request_url, headers=headers)
response.raise_for_status()

# 解析返回的令牌
access_token = response.json()["access_token"]
print(f"获取到的令牌片段:{access_token[:50]}...")

注:实际连接SQL Server时,Databricks可自动处理令牌获取逻辑,无需手动执行此步骤。

二、PySpark通过托管标识连接Azure SQL Server完整示例

这是更高效的直接连接方式,利用JDBC驱动结合托管标识自动完成身份验证:

1. 前置准备

  • 已为Databricks工作区分配系统分配托管标识,或创建并关联了用户分配托管标识至集群
  • 该托管标识已被授予Azure SQL Server的对应权限(如添加为数据库用户、分配读写角色)

2. 连接代码示例

# 配置SQL Server基础信息
sql_server_name = "your-sql-server-name.database.windows.net"
database_name = "your-target-database"
jdbc_connection_url = f"jdbc:sqlserver://{sql_server_name}:1433;database={database_name};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"

# 托管标识认证的JDBC属性
jdbc_properties = {
    "authentication": "ActiveDirectoryMSI",
    "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}

# 读取SQL Server表数据
df = spark.read.jdbc(url=jdbc_connection_url, table="your-source-table", properties=jdbc_properties)
df.show()

# 写入数据到SQL Server(示例)
# df.write.jdbc(url=jdbc_connection_url, table="your-target-table", mode="append", properties=jdbc_properties)

3. 关键说明

  • 设置authentication为ActiveDirectoryMSI后,Databricks会自动关联托管标识并获取令牌,无需手动传入凭据
  • Databricks Runtime通常默认包含SQL Server JDBC驱动,若缺失可通过集群库管理功能安装

三、用户分配托管标识的适配

若使用用户分配类型的托管标识,只需在JDBC属性中添加标识的Client ID:

jdbc_properties = {
    "authentication": "ActiveDirectoryMSI",
    "msiClientId": "your-user-assigned-msi-client-id",
    "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:12:46