我们可以像ADLS一样对Azure Databricks中的Azure SQL DB使用直通身份验证吗?



我们理解在Databricks集群中使用pass - through身份验证允许我们从Databricks笔记本访问ADLS。

我们是否可以实现类似的事情Azure SQL DB/Azure Synapse数据库从Databricks笔记本没有明确指定AD用户名/密码?

是的,您可以使用Keyvault的服务原理从Databricks笔记本中实现Azure SQL DB,而无需指定AD用户名/密码。

先决条件:

  • 在azure活动目录中->进入app注册,注册app
  • 使用密钥库保存应用程序注册的service principle_id,secretetenant_id
  • 为azure sql提供足够的权限并创建用户。

创建Azure密钥库and秘密作用域创建范围→输入DNS名称(例如:https://databricks.vault.azure.net/)和资源ID→转到属性选项卡在Azure门户中使用Azure密钥库,您可以同时获得DNS和资源ID

代码:

import adal
resource_url = "https://database.windows.net/"
service_principal_id = dbutils.secrets.get(scope = "Scope", key = "ClientId")
service_principal_secret = dbutils.secrets.get(scope = "Scope", key = "ClientSecret")
tenant_id = dbutils.secrets.get(scope = "Scope", key = "Tenantid")
authority = "https://login.windows.net/" + tenant_id

jdbc_url = "jdbc:sqlserver://dem12gh.database.windows.net"
database_name = "sqldemo"
db_table = "dbo.Persons" 

encrypt = "true"
host_name_in_certificate = "*.database.windows.net"
context = adal.AuthenticationContext(authority)
token = context.acquire_token_with_client_credentials(resource_url, service_principal_id, service_principal_secret)
access_token = token["accessToken"]
Df = spark.read 
.format("com.microsoft.sqlserver.jdbc.spark") 
.option("url", jdbc_url) 
.option("dbtable", db_table) 
.option("databaseName", database_name) 
.option("accessToken", access_token) 
.option("encrypt", "true") 
.option("hostNameInCertificate", "*.database.windows.net") 
.load()

display(Df)    

请参考Daniel Moody的博客

最新更新