Compartir vía


Conexión a Azure Data Explorer con ODBC

Java Database Connectivity (JDBC) es una API de Java que se usa para conectarse a bases de datos y ejecutar consultas. Puede usar JDBC para conectarse a Azure Data Explorer. Esta funcionalidad es posible mediante el punto de conexión compatible con TDS de Azure Data Explorer, que emula Microsoft SQL Server. El punto de conexión admite las versiones 7.x y 8.0 de TDS.

Para más información, consulte la información general sobre SQL Server emulación en Azure Data Explorer.

Conexión con JDBC

En los pasos siguientes se describe cómo usar JDBC para conectarse a Azure Data Explorer.

  1. Cree una aplicación con mssql-jdbc JAR, adal4j JAR y todas sus dependencias. A continuación se muestra una lista de dependencias necesarias al usar la 7.0.0 versión de mssql-jdbc y 1.6.3 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. Cree una aplicación para usar la clase de controlador JDBC com.microsoft.sqlserver.jdbc.SQLServerDriver. Puede conectarse con un cadena de conexión del siguiente formato. Reemplace <cluster_name.region> por el nombre del clúster y la región del clúster y <database_name> por el nombre de la base de datos.

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

Autenticación de usuario de JDBC

A continuación se muestra un ejemplo de cómo autenticarse mediante programación mediante Microsoft Entra id. con JDBC para una entidad de seguridad de usuario.

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();
    }
  }
}

Autenticación de aplicaciones JDBC

A continuación se muestra un ejemplo de cómo autenticarse mediante programación mediante Microsoft Entra id. con JDBC para una entidad de seguridad de aplicación.

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.
    */
  }
}