繁体   English   中英

如何在 Scala 中使用服务主体连接到 Azure SQL Server

[英]How to connect to an Azure SQL Server using service principal in Scala

我正在寻找一种使用 Service Principal和 SCALA连接到 Azure 数据库的方法。

我希望能够生成一个令牌并在 JDBC 中使用它来连接到数据库。 蟒蛇示例:

import adal

# Located in App Registrations from Azure Portal
tenant_id = "<< tenant id >> "

# Located in App Registrations from Azure Portal
resource_app_id_url = "https://database.windows.net/"

# Authority
authority = "https://login.windows.net/" + tenant_id

context = adal.AuthenticationContext(authority)
token = context.acquire_token_with_client_credentials(resource_app_id_url, service_principal_id, service_principal_secret)
access_token = token["accessToken"]

jdbc_df = spark.read \
        .format("com.microsoft.sqlserver.jdbc.spark") \
        .option("url", url) \
        .option("dbtable", dbtable) \
        .option("accessToken", access_token) \
        .option("encrypt", "true") \
        .option("hostNameInCertificate", "*.database.windows.net") \
        .load()

另一个 SO 示例

谢谢

这是几天搜索后的答案!

import com.microsoft.aad.adal4j.AuthenticationContext;
import com.microsoft.aad.adal4j.ClientCredential;
import java.util.concurrent.Executors;


val AUTHORITY_URL = "https://login.microsoftonline.com/"+tenant_id
val principalId = service_principal_id
val principalSecret = service_principal_secret
val URL="jdbc:sqlserver://xx.database.windows.net:1433;database=xx;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30"



val service = Executors.newFixedThreadPool(1);
val context = new AuthenticationContext(AUTHORITY_URL, true, service);
val credential = new ClientCredential(principalId, principalSecret);
val result = context.acquireToken("https://database.windows.net/", credential, null).get();

// println("***********************")
// println(result.getAccessToken())
// println("***********************")


val df= spark.read 
        .format("com.microsoft.sqlserver.jdbc.spark") 
        .option("url", URL) 
        .option("dbtable", "xx") 
        .option("accessToken", result.getAccessToken()) 
        .load()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM