Azure Databricks临时Job Cluster通过Service Principal连接Azure SQL咨询
Azure Databricks Notebook 连接 Azure SQL Database 实战方案
一、连接示例代码(结合Secret凭据)
针对按需启停的Job Cluster,直接用Databricks Secrets管理敏感凭据,代码如下:
# 从Databricks Secret Scope读取服务主体信息 sp_id = dbutils.secrets.get(scope="你的Secret Scope名称", key="service-principal-id") sp_secret = dbutils.secrets.get(scope="你的Secret Scope名称", key="service-principal-secret") tenant_id = dbutils.secrets.get(scope="你的Secret Scope名称", key="azure-tenant-id") # 构建SQL DB连接地址 server_name = "你的SQL服务器名称.database.windows.net" database_name = "你的数据库名称" jdbc_url = f"jdbc:sqlserver://{server_name}:1433;database={database_name};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;" # AD服务主体认证参数 connection_properties = { "user": sp_id, "password": sp_secret, "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver", "authentication": "ActiveDirectoryServicePrincipal", "tenantId": tenant_id } # 读取SQL表数据示例 df = spark.read.jdbc(url=jdbc_url, table="目标表名", properties=connection_properties) # 写入SQL表数据示例(追加模式) df.write.jdbc(url=jdbc_url, table="目标表名", mode="append", properties=connection_properties)
二、Service Principal ID和Secret相关问题解答
1. 基本概念与管理员需配置项
- Service Principal ID:Azure AD中注册的服务主体唯一标识,相当于服务级别的"用户名",用于代表应用/服务完成Azure资源的身份认证。
- Service Principal Secret:服务主体的认证密码,相当于服务级别的"登录密码",仅在生成时可见,需妥善保存。
若你已有AD权限,需让管理员完成以下配置:
- 在Azure AD中注册应用程序(服务主体),生成对应的Service Principal ID。
- 为该服务主体创建客户端密码(Secret)。
- 给服务主体分配Azure SQL Database的权限,比如
db_datareader/db_datawriter或更高权限,确保能读写目标库。 - 配置Azure SQL服务器的AD管理员:只有设置了AD管理员,服务主体才能通过AD认证连接SQL DB。
2. Azure门户中获取两项信息的步骤
获取Service Principal ID:
- 登录Azure门户,进入Azure Active Directory → 应用注册。
- 找到目标服务主体应用,进入详情页。
- 在概述页面复制应用程序(客户端)ID,即为Service Principal ID。
获取Service Principal Secret:
- 在服务主体应用详情页,进入证书和密码 → 客户端密码。
- 点击新建客户端密码,设置过期时间后点击添加。
- 复制生成的值(仅生成时可查看,务必立刻保存),即为Service Principal Secret。
三、Job Cluster结合Secret的注意事项
- 确保Databricks工作区已创建Secret Scope,并将Service Principal ID、Secret、租户ID存入对应Key中。
- Job Cluster启动时会自动加载Secret Scope权限,只要Notebook代码中的Scope和Key名称正确,即可正常读取凭据,无需额外配置。
内容的提问来源于stack exchange,提问作者Developer Rajinikanth
相关产品推荐
相关产品推荐

