将 Azure Databricks 与服务主体的 JDBC 驱动程序和 Azure AD 令牌连接起来

问题描述 投票:0回答:2

我工作的用例是使用来自外部 Web 服务和查询表的 jdbc 驱动程序连接 Databricks 集群。

文档中解释的连接字符串(https://learn.microsoft.com/en-us/azure/databricks/integrations/jdbc-odbc-bi#--jdbc-driver)提到了两个要使用的标记,它们是 azure 广告令牌和 PAT 令牌。

令人困惑的是,为什么我们需要 PAT 令牌以及 Azure AD 令牌? AAD 令牌是否不足以进行身份验证?

我能够通过 PAT 令牌(我的用户帐户)与 jdbc 驱动程序连接,但使用服务主体使其健壮。

databricks azure-databricks
2个回答
0
投票

是的,AD 令牌足以验证与 Azure Databricks 的连接,但您还需要 PAT 来授权连接可以在 Databricks 工作区内执行的特定操作。

换句话说,PAT可以用来授权用户运行特定的notebook来读取或写入特定集群的数据。

我在我的环境中使用 PAT 令牌重现相同内容。我得到了这个输出。

注意:确保安装Databricks SQL Connect

pip install databricks-sql-connector

代码:

import os
from databricks import sql

conn = sql.connect(
    server_hostname = "adb-xxxxxxx.12.azuredatabricks.net",
    http_path = "/sql/1.0/warehouses/xxxxx",
    access_token = "dapiaxxxxxxxxxxxx78e7f")

cursor = conn.cursor()

cursor.execute("SELECT * from <table_name>")
display(cursor.fetchall())

cursor.close()
conn.close()

输出:

enter image description here


0
投票

提供您为服务主体生成的 AAD 令牌就足够了——您不需要提供 PAT。您只需要为

AuthMeth
设置正确的值(11 而不是 3),将
Auth_AccessToken
设置为您的 AAD 令牌的值,并将
Auth_Flow
设置为
0
。这是通过 JDBC 访问 DBSQL 的完整示例,并为服务主体生成 AAD 令牌。

© www.soinside.com 2019 - 2024. All rights reserved.