1

我设法使用以下代码片段从 python 连接到 Databricks:

from databricks import sql

connection = sql.connect(
  server_hostname='<server-hostname>',
  http_path='<http-path>',
  access_token='<personal-access-token>')

cursor = connection.cursor()

cursor.execute('SELECT * FROM <database-name>.<table-name> LIMIT 2')

result = cursor.fetchall()

for row in result:
  print(row)

cursor.close()

该片段来自官方文档,如您所见,它需要server_hostname,http_pathaccess_token. 我的问题是,我可以在没有 的情况下验证自己access_token吗?也许使用托管标识,因为这两种技术都来自微软?

4

1 回答 1

1

您可以使用 AAD 令牌代替个人访问令牌。生成它的最简单方法是使用Microsoft的 azure-identity 库

下面是为服务主体生成 AAD 令牌的代码示例:

from databricks import sql
from azure.identity import ClientSecretCredential
import os

tenant_id = '...'
client_id = '...'
client_secret = os.environ['SP_SECRET']
csc = ClientSecretCredential(tenant_id, client_id, client_secret)

# important!
dbx_scope = '2ff814a6-3304-4ab8-85cb-cd0e6f879c1d/.default'
# this will be used as access token
aad_token = csc.get_token(dbx_scope).token

也应该可以使用托管标识 - 只需使用ManagedIdentityCredential 类。我相信您也可以使用该库生成用户的 AAD 令牌。如果你不想有额外的依赖,你可以通过 REST API 生成它,就像这个代码一样。

管理员需要使用相应的 REST APIDatabricks Terraform 提供程序将要使用的标识添加到 Azure Databricks 工作区。并且还授予访问 Databricks 集群或 SQL 端点的权限——这也可以通过 REST API 或 Terraform 实现。

需要考虑的一件事是 AAD 令牌过期(多快 - 这取决于您使用的内容:服务主体或托管标识),因此您可能需要定期重新创建连接。

于 2021-11-25T12:00:43.397 回答