Строка подключения JDBC для SQL DW

#sql #azure #jdbc #access-token #data-warehouse

#sql #azure #jdbc #токен доступа #хранилище данных

Вопрос:

как я могу использовать токен доступа в строке подключения JDBC для подключения к Azure SQL DW?

Комментарии:

1. Привет @Whiplash, добро пожаловать в stack overflow! Если мой ответ полезен для вас, вы можете принять его в качестве ответа (нажмите на галочку рядом с ответом, чтобы переключить его с серого на заполненный.). Это может быть полезно для других участников сообщества. Спасибо.

Ответ №1:

Пожалуйста, обратитесь к этому руководству по Azure: подключение с использованием токена доступа:

  • Приложения / службы могут извлекать токен доступа из Azure Active Directory и использовать его для подключения к базе данных / хранилищу данных SQL Azure.

Приведенный ниже пример содержит простое Java-приложение, которое подключается к базе данных / хранилищу данных Azure SQL с использованием аутентификации на основе токенов доступа.

Пример кода:

 import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;

// The azure-activedirectory-library-for-java is needed to retrieve the access token from the AD.
import com.microsoft.aad.adal4j.AuthenticationContext;
import com.microsoft.aad.adal4j.AuthenticationResu<
import com.microsoft.aad.adal4j.ClientCredential;

public class AADTokenBased {

    public static void main(String[] args) throws Exception {

        // Retrieve the access token from the AD.
        String spn = "https://database.windows.net/";
        String stsurl = "https://login.microsoftonline.com/..."; // Replace with your STS URL.
        String clientId = "1846943b-ad04-4808-aa13-4702d908b5c1"; // Replace with your client ID.
        String clientSecret = "..."; // Replace with your client secret.

        AuthenticationContext context = new AuthenticationContext(stsurl, false, Executors.newFixedThreadPool(1));
        ClientCredential cred = new ClientCredential(clientId, clientSecret);

        Future<AuthenticationResult> future = context.acquireToken(spn, cred, null);
        String accessToken = future.get().getAccessToken();

        System.out.println("Access Token: "   accessToken);

        // Connect with the access token.
        SQLServerDataSource ds = new SQLServerDataSource();

        ds.setServerName("aad-managed-demo.database.windows.net"); // Replace with your server name.
        ds.setDatabaseName("demo"); // Replace with your database name.
        ds.setAccessToken(accessToken);

        try (Connection connection = ds.getConnection(); 
                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
            if (rs.next()) {
                System.out.println("You have successfully logged on as: "   rs.getString(1));
            }
        }
    }
}
  

HTH.