SonarQube v6.7在Ubuntu 14.04启动失败:权限拒绝问题求助
问题分析与解决方案
为什么只授予sonar.*权限会失败?
SonarQube 6.7这个老版本(属于早期LTS分支),在启动和运行过程中,除了操作自身的sonar业务数据库,还会执行一些跨库的系统级查询:
- 它会访问
information_schema读取数据库元数据(比如表结构、字符集配置),确认数据库环境是否符合运行要求; - 也会查询
mysql库的部分系统表,或者执行SHOW VARIABLES这类全局命令来验证数据库参数(比如max_allowed_packet);
这些操作都不在sonar数据库的权限范围内,所以仅给sonar.*的全权限,会导致这些系统级操作被MySQL拒绝,进而让SonarQube启动失败。
更安全的最优解决方式
不要给用户授予全数据库权限(这会带来不必要的安全风险),而是针对性地授予SonarQube实际需要的权限,步骤如下:
- 先撤销之前的全库权限(如果已经授予过):
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'sonar'@'%';
- 授予
sonar业务数据库的全部核心权限:
GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
- 授予系统级的必要权限,满足SonarQube的环境检查需求:
-- 允许读取元数据信息 GRANT SELECT ON information_schema.* TO 'sonar'@'%'; -- 允许查询数据库列表和系统变量 GRANT SHOW DATABASES ON *.* TO 'sonar'@'%'; -- 允许读取MySQL系统表的配置信息 GRANT SELECT ON mysql.* TO 'sonar'@'%';
- 刷新权限使配置立即生效:
FLUSH PRIVILEGES;
最后检查SonarQube配置文件sonar.properties里的数据库连接URL,确保明确指定了sonar数据库,比如:
sonar.jdbc.url=jdbc:mysql://localhost/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
这样配置后,SonarQube既能正常启动运行,又不会给sonar用户过度的数据库权限,兼顾了功能需求和安全性。
内容的提问来源于stack exchange,提问作者AlainD.
相关产品推荐
相关产品推荐

