3

我需要通过服务主体从 Azure Databricks 连接到 Azure SQL 数据库。尝试搜索论坛但无法找到正确的方法。任何帮助是极大的赞赏。

使用 JDBC 连接尝试了使用 SQL 用户 ID 和密码的类似方法,并且成功。现在研究服务主体方法。

PS:SP ID 和 Key 应该放在 Azure Key Vault 中,需要在 Databricks 上这里访问。

4

4 回答 4

0

Azure Databricks 支持 Azure Key Vault

https://docs.azuredatabricks.net/user-guide/secrets/secret-scopes.html#akv-ss

于 2019-04-18T20:58:04.653 回答
0
**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#';
于 2019-08-02T07:54:50.683 回答
0

您可以使用适用于 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() 
于 2021-05-20T21:14:01.107 回答
0

也许您可以参考本教程:Configuring AAD Authentication to Azure SQL Databases

摘要

Azure SQL 是一项很棒的服务——您可以将数据库放入云中,而无需管理所有令人讨厌的服务器内容。但是,Azure SQL 的问题之一是您必须使用 SQL 身份验证(用户名和密码)进行身份验证。但是,您也可以通过 Azure Active Directory (AAD) 令牌进行身份验证。这类似于使用 Windows 身份验证的集成登录 - 但您使用的是 AAD 而不是 Active Directory。

AAD 身份验证有许多优点:

  1. 由于用户使用其 AAD 凭据登录,因此您不再需要共享登录信息,因此审计更好
  2. 您可以使用 AAD 组管理对数据库的访问
  3. 您可以通过服务主体启用“应用程序”登录

为了使其正常工作,您需要:

  1. 在 Azure SQL Server 上启用 AAD 身份验证
  2. 服务负责人
  3. 将登录名添加到数据库,授予服务主体所需的任何权限
  4. 添加代码以获取用于访问数据库的身份验证令牌

但在这篇文章中,作者将介绍如何创建服务主体、为 AAD 身份验证配置数据库、创建用于检索令牌的代码以及为 AAD 身份验证配置 EF DbContext。

仍然希望本教程能有所帮助。

于 2019-04-03T03:34:28.233 回答