我需要通过服务主体从 Azure Databricks 连接到 Azure SQL 数据库。尝试搜索论坛但无法找到正确的方法。任何帮助是极大的赞赏。
使用 JDBC 连接尝试了使用 SQL 用户 ID 和密码的类似方法,并且成功。现在研究服务主体方法。
PS:SP ID 和 Key 应该放在 Azure Key Vault 中,需要在 Databricks 上这里访问。
我需要通过服务主体从 Azure Databricks 连接到 Azure SQL 数据库。尝试搜索论坛但无法找到正确的方法。任何帮助是极大的赞赏。
使用 JDBC 连接尝试了使用 SQL 用户 ID 和密码的类似方法,并且成功。现在研究服务主体方法。
PS:SP ID 和 Key 应该放在 Azure Key Vault 中,需要在 Databricks 上这里访问。
Azure Databricks 支持 Azure Key Vault
https://docs.azuredatabricks.net/user-guide/secrets/secret-scopes.html#akv-ss
**Here's the working Solution**
sql_url=sqlserver://#SERVER_NAME#.database.windows.net:1433;database=#DATABASE_NAME#
properties = {"user":"#APP_NAME#","password":dbutils.secrets.get(scope =
"#SCOPE_NAME#", key =
"#KEYVAULT_SECRET_NAME#"),"driver":"com.microsoft.sqlserver.jdbc.SQLServerDriver"}
**APP_NAME**==>which is created under app registration in Azure active directory.
**SCOPE_NAME**==>Which you have create mentioned on docs Follow the
URL(https://docs.azuredatabricks.net/user-guide/secrets/secret-scopes.html)
**KEYVAULT_SECRET_NAME**==>Secret Key name which is put into AKV.
**NOTE PROVIDE ACCESS TO YOUR APP_ID ON DATABASE STEPS MENTIONED BELOW**
CREATE USER #APP_NAME# FROM EXTERNAL PROVIDER
EXEC sp_addrolemember 'db_owner', '#APP_NAME#';
您可以使用适用于 SQL Server 和 Azure SQL 的 Apache Spark 连接器,并且可以在以下 Python 文件 中找到您必须在 Databricks 中执行的操作的示例
如您所见,我们并没有直接与服务主体连接,而是使用服务主体生成访问令牌,稍后在指定连接参数时将使用该令牌:
jdbc_df = spark.read.format("com.microsoft.sqlserver.jdbc.spark") \
.option("url", url) \
.option("dbtable", db_table) \
.option("accessToken", access_token) \
.option("encrypt", "true") \
.option("databaseName", database_name) \
.option("hostNameInCertificate", "*.database.windows.net") \
.load()
但是,如果您不能或不想使用以前的库,您也可以使用 Spark 的本机 Azure-SQL JDBC 连接器执行相同操作:
jdbc_df = spark.read.format("com.microsoft.sqlserver.jdbc.SQLServerDriver")\
.option("url", url) \
.option("dbtable", db_table) \
.option("accessToken", access_token) \
.option("encrypt", "true") \
.option("databaseName", database_name) \
.option("hostNameInCertificate", "*.database.windows.net") \
.load()
也许您可以参考本教程:Configuring AAD Authentication to Azure SQL Databases。
摘要:
Azure SQL 是一项很棒的服务——您可以将数据库放入云中,而无需管理所有令人讨厌的服务器内容。但是,Azure SQL 的问题之一是您必须使用 SQL 身份验证(用户名和密码)进行身份验证。但是,您也可以通过 Azure Active Directory (AAD) 令牌进行身份验证。这类似于使用 Windows 身份验证的集成登录 - 但您使用的是 AAD 而不是 Active Directory。
AAD 身份验证有许多优点:
为了使其正常工作,您需要:
但在这篇文章中,作者将介绍如何创建服务主体、为 AAD 身份验证配置数据库、创建用于检索令牌的代码以及为 AAD 身份验证配置 EF DbContext。
仍然希望本教程能有所帮助。