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

SonarQube配置Azure SQL ActiveDirectoryManagedIdentity认证失败求助

关于SonarQube对接Azure SQL托管身份认证的问题

背景

尝试在SonarQube主机中不硬编码账号密码的前提下,配置SonarQube与Azure SQL数据库对接,相关环境信息如下:

  • SonarQube版本:10.1.0(评估版)
  • Java版本:java 17.0.7 2023-04-18 LTS Java(TM) SE Runtime Environment (build 17.0.7+8-LTS-224) Java HotSpot(TM) 64-Bit Server VM (build 17.0.7+8-LTS-224, mixed mode, sharing)
  • SonarQube主机:Azure上的Windows Server 2019 Datacenter,已配置系统分配托管标识
  • Azure SQL数据库配置:启用Azure AD认证,SonarQube主机的托管标识已被添加为数据库用户,且通过SSMS验证了连通性
  • SonarQube当前配置:sonar.jdbc.url=jdbc:sqlserver://my-sqlserver.database.windows.net:1433;database=ms-sql-db-sonar;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;user=<SONAR VM IdentityId>;Authentication=ActiveDirectoryManagedIdentity;
  • 内置JDBC驱动版本:mssql-jdbc-12.2.0.jre11
  • SonarQube运行模式:控制台模式

问题

执行<SONAR安装路径>\bin\windows-x86-64\StartSonar启动时,出现以下错误:

2023.07.14 21:41:33 ERROR web[][c.z.h.p.HikariPool] HikariPool-1 - Exception during pool initialization.
com.microsoft.sqlserver.jdbc.SQLServerException: Failed to load MSAL4J Java library for performing ActiveDirectoryManagedIdentity authentication.
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.getFedAuthToken(SQLServerConnection.java:5642)
    ...

疑问

  1. SonarQube是否支持Azure SQL的ActiveDirectoryManagedIdentity认证模式?
  2. 若支持,正确的配置步骤是什么?
  3. 若不支持,有没有安全存储SQL连接账号密码的替代方案?

已尝试操作

  • 从Maven下载msal4j-1.13.9和azure-identity-1.7.0 jar包放入C:\Program Files\Java\jdk-17\bin
  • 添加CLASSPATH环境变量指向这些jar包
  • 重启系统后问题仍未解决

解答

1. SonarQube是否支持该认证模式?

SonarQube 10.1.0本身支持Azure SQL的ActiveDirectoryManagedIdentity认证模式,但内置的mssql-jdbc驱动需要额外的MSAL4J相关依赖库才能完成托管身份的令牌获取,这是当前报错的核心原因。

2. 正确配置步骤

步骤1:准备兼容的依赖包

mssql-jdbc-12.2.0.jre11需要搭配兼容版本的MSAL4J和Azure Identity库,建议使用:

  • msal4j: 1.14.0 及以上版本
  • azure-identity: 1.8.0 及以上版本

步骤2:放置依赖包到正确路径

不要将jar包放到JDK目录,应该放到SonarQube安装目录下的extensions/jdbc-driver/mssql文件夹(如果该文件夹不存在,手动创建)。SonarQube启动时会自动加载这个目录下的JDBC驱动相关依赖。

步骤3:修正JDBC URL配置

对于系统分配托管标识,不需要在JDBC URL中指定user=<SONAR VM IdentityId>参数,修正后的URL如下:

sonar.jdbc.url=jdbc:sqlserver://my-sqlserver.database.windows.net:1433;database=ms-sql-db-sonar;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;Authentication=ActiveDirectoryManagedIdentity;

步骤4:重启SonarQube

先停止控制台运行的SonarQube进程,再重新执行StartSonar.bat启动服务。

3. 替代安全方案(若认证模式无法生效时)

如果托管身份认证仍有问题,可以使用Azure Key Vault安全存储SQL账号密码,通过以下方式实现:

  • 将SQL的账号和密码存入Azure Key Vault
  • 给SonarQube主机的托管标识分配Key Vault的机密读取权限
  • 修改SonarQube启动脚本(StartSonar.bat),在启动前通过PowerShell或Azure CLI从Key Vault中读取凭据,设置为环境变量
  • 在sonar.properties中通过环境变量引用凭据:
    sonar.jdbc.username=${env:SQL_DB_USER}
    sonar.jdbc.password=${env:SQL_DB_PWD}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:31:12