Se connecter à Azure Data Explorer avec JDBC

Java Database Connectivity (JDBC) est une API Java utilisée pour se connecter aux bases de données et exécuter des requêtes. Vous pouvez utiliser JDBC pour vous connecter à Azure Data Explorer. Cette fonctionnalité est rendue possible par le point de terminaison compatible TDS d’Azure Data Explorer, qui émule Microsoft SQL Server. Le point de terminaison prend en charge les versions TDS 7.x et 8.0.

Pour plus d’informations, consultez la vue d’ensemble de l’émulation SQL Server dans Azure Data Explorer.

Se connecter avec JDBC

Les étapes suivantes décrivent comment utiliser JDBC pour se connecter à Azure Data Explorer.

  1. Créez une application avec mssql-jdbc JAR, adal4j JAR et toutes leurs dépendances. Voici la liste des dépendances requises lors de l’utilisation de la 7.0.0 version de et 1.6.3 de mssql-jdbc la version de adal4j.

    mssql-jdbc-7.0.0.jre8.jar
    adal4j-1.6.3.jar
    accessors-smart-1.2.jar
    activation-1.1.jar
    asm-5.0.4.jar
    commons-codec-1.11.jar
    commons-lang3-3.5.jar
    gson-2.8.0.jar
    javax.mail-1.6.1.jar
    jcip-annotations-1.0-1.jar
    json-smart-2.3.jar
    lang-tag-1.4.4.jar
    nimbus-jose-jwt-6.5.jar
    oauth2-oidc-sdk-5.64.4.jar
    slf4j-api-1.7.21.jar
    
  2. Créez une application pour utiliser la classe de pilote JDBC com.microsoft.sqlserver.jdbc.SQLServerDriver. Vous pouvez vous connecter avec un chaîne de connexion au format suivant. Remplacez par <cluster_name.region> le nom de votre cluster et la région du cluster et <database_name> par le nom de votre base de données.

    jdbc:sqlserver://<cluster_name.region>.kusto.windows.net:1433;database=<database_name>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.kusto.windows.net;loginTimeout=30;authentication=ActiveDirectoryIntegrated
    

Authentification utilisateur JDBC

Voici un exemple montrant comment s’authentifier par programmation à l’aide de Microsoft Entra’ID avec JDBC pour un principal d’utilisateur.

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
import com.microsoft.aad.msal4j.*;

public class Sample {
  public static void main(String[] args) throws Exception {
    IAuthenticationResult authenticationResult = futureAuthenticationResult.get();
    SQLServerDataSource ds = new SQLServerDataSource();
    ds.setServerName("<cluster_DNS>");
    ds.setDatabaseName("<database_name>");
    ds.setHostNameInCertificate("*.kusto.windows.net"); // Or appropriate regional domain.
    ds.setAuthentication("ActiveDirectoryIntegrated");
    try (Connection connection = ds.getConnection();
         Statement stmt = connection.createStatement();) {
      ResultSet rs = stmt.executeQuery("<T-SQL_query>");
      /*
      Read query result.
      */
    } catch (Exception e) {
      System.out.println();
      e.printStackTrace();
    }
  }
}

Authentification de l’application JDBC

Voici un exemple montrant comment s’authentifier par programmation à l’aide de Microsoft Entra’ID avec JDBC pour un principal d’application.

import java.sql.*;
import com.microsoft.sqlserver.jdbc.*;
import com.microsoft.aad.msal4j.*;
import java.net.MalformedURLException;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class Sample {
  public static void main(String[] args) throws Throwable {
    // Can also use tenant name.
    String authorityUrl = "https://login.microsoftonline.com/<tenant_ID>";
    Set<String> scopes = new HashSet<>();
    scopes.add("https://<cluster_DNS>/.default");

    IConfidentialClientApplication clientApplication = ConfidentialClientApplication.builder("<application_client_ID>", ClientCredentialFactory.createFromSecret("<application_key>")).authority(authorityUrl).build();
    CompletableFuture<IAuthenticationResult> futureAuthenticationResult = clientApplication.acquireToken(ClientCredentialParameters.builder(scopes).build());
    IAuthenticationResult authenticationResult = futureAuthenticationResult.get();
    SQLServerDataSource ds = new SQLServerDataSource();
    ds.setServerName("<cluster_DNS>");
    ds.setDatabaseName("<database_name>");
    ds.setAccessToken(authenticationResult.accessToken());
    connection = ds.getConnection();
    statement = connection.createStatement();
    ResultSet rs = statement.executeQuery("<T-SQL_query>");
    /*
    Read query result.
    */
  }
}