我工作的用例是使用来自外部 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 驱动程序连接,但使用服务主体使其健壮。
是的,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()
输出:
提供您为服务主体生成的 AAD 令牌就足够了——您不需要提供 PAT。您只需要为
AuthMeth
设置正确的值(11 而不是 3),将 Auth_AccessToken
设置为您的 AAD 令牌的值,并将 Auth_Flow
设置为 0
。这是通过 JDBC 访问 DBSQL 的完整示例,并为服务主体生成 AAD 令牌。