You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Java JDBC使用支持MFA的Azure AD通用认证连接SQL Server

实现Java项目通过Azure AD通用MFA认证连接SQL Server

前置准备

  • 确认SQL Server已配置Azure AD认证并启用MFA
  • 安装Microsoft JDBC Driver for SQL Server(版本≥9.2,确保支持Azure AD MFA特性)
  • 在Azure AD中注册Java应用,获取客户端ID,并为应用授予Azure SQL Database的必要访问权限(如User.Read)

分步实现

1. 添加Maven依赖

在pom.xml中引入JDBC驱动:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>12.4.1.jre11</version> <!-- 推荐使用最新稳定版 -->
</dependency>

2. 配置连接字符串

Azure AD通用MFA认证的核心连接参数:

  • authentication=ActiveDirectoryInteractive:指定交互式MFA认证模式
  • encrypt=true:强制加密连接(Azure AD认证要求)
  • hostNameInCertificate=*.database.windows.net:Azure SQL DB的证书验证规则(本地SQL Server集成Azure AD需对应调整)
  • server:SQL Server地址(如your-sql-server.database.windows.net)
  • database:目标数据库名称

示例连接字符串:

String connectionUrl = "jdbc:sqlserver://your-sql-server.database.windows.net:1433;"
        + "databaseName=your-db-name;"
        + "authentication=ActiveDirectoryInteractive;"
        + "encrypt=true;"
        + "hostNameInCertificate=*.database.windows.net;"
        + "clientId=your-azure-ad-app-client-id;";

3. 编写连接代码

交互式MFA会弹出认证窗口,引导用户完成账号输入及MFA验证(如短信、Authenticator应用):

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class AzureADMfaSqlConnector {
    public static void main(String[] args) {
        String connectionUrl = "jdbc:sqlserver://your-sql-server.database.windows.net:1433;"
                + "databaseName=your-db-name;"
                + "authentication=ActiveDirectoryInteractive;"
                + "encrypt=true;"
                + "hostNameInCertificate=*.database.windows.net;"
                + "clientId=your-azure-ad-app-client-id;";

        try (Connection conn = DriverManager.getConnection(connectionUrl);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT @@VERSION")) {

            while (rs.next()) {
                System.out.println("SQL Server版本: " + rs.getString(1));
            }
            System.out.println("MFA认证连接成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4. 非交互式场景适配(可选)

如果是后台服务无法弹出交互窗口,可选择两种方案:

  • 服务主体证书认证:无需用户MFA,通过Azure AD服务主体的证书完成认证
  • ActiveDirectoryPassword模式:用户输入密码,MFA通过预设渠道(如短信)触发,连接字符串示例:
String connectionUrl = "jdbc:sqlserver://your-sql-server.database.windows.net:1433;"
        + "databaseName=your-db-name;"
        + "authentication=ActiveDirectoryPassword;"
        + "encrypt=true;"
        + "hostNameInCertificate=*.database.windows.net;"
        + "user=your-aad-user@your-domain.onmicrosoft.com;"
        + "password=your-user-password;";

关键配置说明

  • clientId:必须与Azure AD注册应用的ID完全匹配,否则认证流程会失败
  • encrypt=true:Azure AD认证强制要求加密连接,缺失会导致连接报错
  • hostNameInCertificate:用于验证SQL Server SSL证书,防止中间人攻击,需根据部署环境调整

最佳实践

  • 始终使用最新版JDBC驱动,获取兼容性修复和安全更新
  • 敏感信息(如clientId、密码)避免硬编码,改用环境变量或配置中心存储
  • 无界面服务器场景优先使用服务主体证书认证,替代交互式MFA
  • Azure AD应用权限遵循最小权限原则,仅授予必要的SQL访问权限
  • 捕获并处理认证异常(如MFA验证失败、权限不足),提供明确的错误提示

内容的提问来源于stack exchange,提问作者sree_me

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:16:11