上下文:尝试使用 Azure SQL DB 设置 SonarQube 无需对 SonarQube 主机中任何位置的任何用户和密码进行硬编码
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 主机:Windows Server 2019 数据中心(在 Azure 中)
SonarQube HOST 配置有系统分配的托管身份
Azure SQL DB 配置为:
具有 Azure AD 身份验证的 Azure SQL 数据库
SonarQube 主机名配置为包含的用户
SonarQube 主机和具有托管身份的 SQL 数据库的连接已通过验证并可与 SSMS(安装在 SonarQube 主机中)配合使用
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
;
Microsoft SQL JDBC 驱动程序版本(SonarQube 内置):mssql-jdbc-12.2.0.jre11
SonarQube 目前正在控制台模式下执行
问题陈述:
当我们从(
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)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.onFedAuthInfo(SQLServerConnection.java:5618)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.processFedAuthInfo(SQLServerConnection.java:5463)
at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onFedAuthInfo(tdsparser.java:311)
at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:131)
at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:42)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:6490)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:5068)
at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:5002)
......
......
......
查询:
SonarQube 是否支持 Azure SQL DB 的“ActiveDirectoryManagedIdentity”身份验证模式?
如果支持上述,任何人都可以帮我描述正确配置它的步骤吗?
如果以上都不支持,是否有任何简单的方法可以完全保护SonarQube中SQL连接的用户和密码信息?截至目前,它已硬编码在 sonar.properties 文件中。
以我有限的 Java 知识,已经在不同的网站上尝试了以下方法:
我仍然面临这个问题。还有进一步的建议吗? 我正在使用 sonarqube docker image 9.9-LTS enterprise。使用版本 9.9-LTS enterprise 的 SonarQube docker 映像,jdbc-driver 版本与您提到的“mssql-jdbc-11.2.2.jre17.jar”相同,但我仍然无法进行身份验证。
我正在使用 helm 进行部署,并且我的连接字符串完全相同。