之前本机跑了一套SonarQube
的社区版,默认使用的是H2
数据库,那么我把它练到我机器上的SQL Server
数据库了,期间遇到以下两个问题,并在配置过程中解决掉,特将这个过程记录下来。
一、JDBC连接SQL Server问题
1. 问题出现
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: “Encrypt”属性设置为“true”且 “trustServerCertificate”属性设置为“false”,但驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server 建立安全连接:错误:(certificate_unknown) PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target。 ClientConnectionId:f2442503-79f4-4bbf-b402-c63f310d2b1b
2. 问题分析
这是因为默认启用了encrypt
属性,且trustServerCertificate
服务器证书信任属性为false
(即不信任服务器证书),这样就要自行指定证书了,然后又没有给指定,那当然不让连。
3. 解决办法
(1)信任服务器证书
也就是使用自签名证书:
sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar;encrypt=true;trustServerCertificate=true
(2)不加密(不建议)
一不做二不休,干脆不加密了:
sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar;encrypt=false
当然,这么干风险是存在的,当然用于本地测试学习,也无所谓了,生产环境确实不建议:
风险描述:当encrypt=false
时,客户端不会强制要求加密。如果SQL Server
未配置强制加密(例如服务器未启用“强制加密”选项),所有通信数据(包括敏感信息如用户名、密码、查询内容等)将以明文形式传输。
潜在后果:攻击者可通过网络抓包(如Wireshark
)窃取数据,导致信息泄露或中间人攻击。
二、数据库排序规则问题
1. 问题出现
Caused by: org.sonar.api.utils.MessageException: Database collation must be case-sensitive and accent-sensitive. It is Chinese_PRC_CI_AS but should be Chinese_PRC_CS_AS.
2. 问题分析
SonarQube
要求数据库排序规则case-sensitive
和accent-sensitive
,按照要求修改数据库(或者在创建时注意)即可。
3. 解决办法
ALTER DATABASE sonar COLLATE Chinese_PRC_CS_AS