首页 > 解决方案 > Azure SQL 和 AAD 身份验证

问题描述

Azure SQL 是否支持通过 AAD 客户端 ID 和密钥进行访问?如果是,那么授予对 AAD ClientId 访问权限的 TSQL 是什么,我可以使用 SSMS 通过 AAD 客户端和密钥连接到 Azure SQL 吗?

标签: azure-sql-databaseazure-active-directory

解决方案


是的,您可以使用访问令牌(AD 令牌)

应用程序/服务可以从 Azure Active Directory 检索访问令牌并使用它连接到 SQL Azure 数据库。

  1. http://mytokentest在注册您的 APP 时在 signonURL 中 提供任何东西( )

  2. CREATE USER [mytokentest] FROM EXTERNAL PROVIDER

在客户端应用程序中尝试以下代码

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);
        ds.setHostNameInCertificate("*.database.windows.net");

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

在此处使用示例 Java 代码

  1. 向 Azure Active Directory 注册应用程序并获取代码的客户端 ID。
  2. 创建代表应用程序的数据库用户。(在前面的第 6 步中完成。)
  3. 在客户端计算机上创建证书运行应用程序
  4. 将证书添加为您的应用程序的密钥。

在此处使用示例 C# 代码


推荐阅读