无法访问Sonar MySQL数据库引起:java.sql.SQLException:用户'sonar'@'glassfishdev.ccs.local'拒绝访问(使用密码:YES)

时间:2011-08-30 18:27:00

标签: mysql ant hudson jenkins sonarqube

我正在尝试将Sonar添加到我的持续集成构建系统中。我使用ANT作为我的构建脚本,我使用sonar-ant-task-1.1.jar为声纳根据我在SVN中的源代码生成报告。

问题 当构建运行并命中声纳ant任务时,我得到如下异常:

Caused by: java.sql.SQLException: Access denied for user 'sonar'@'glassfishdev.ccs.local' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4004)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1284)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2312)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:774)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289)
at org.sonar.jpa.session.DriverProxy.connect(DriverDatabaseConnector.java:160)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at org.sonar.jpa.session.DriverDatabaseConnector.getConnection(DriverDatabaseConnector.java:95)
at org.sonar.jpa.session.AbstractDatabaseConnector.testConnection(AbstractDatabaseConnector.java:185)
... 40 more

我做了什么

1. 安装MySQL数据库。

2. :使用声纳安装中提供的脚本创建声纳数据库,声纳用户和授予权限

**CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;    
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;**

3。在我的构建脚本中添加了following

4. 在Jenkins Freestyle构建项目中添加了以下外部变量

sonar.jdbc.url=jdbc:mysql://10.120.21.12:3306/sonar?useUnicode=true&characterEncoding=utf8
    sonar.jdbc.driverClassName=com.mysql.jdbc.Driver
    sonar.jdbc.username=sonar
    sonar.jdbc.password=sonar
    sonar.host.url=http://10.120.21.12:9000/

5. 我也可以通过我的sql客户端工具连接到数据库,以验证数据库,用户和权限语句是否已正确执行。

然而,当Jenkins运行构建时,它似乎不知道如何连接到MySQL数据库。

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

解决方案是运行以​​下命令:

全部开启*。*收听'声纳'@'%';

答案 1 :(得分:1)

正确的解决方案是:

GRANT ALL PRIVILEGES ON `sonar`.* TO 'sonar'@'localhost';

正如here所解释的那样,与localhost的连接发生在UNIX域套接字上。您可能以匿名用户身份登录localhost(例如“@localhost”)。

答案 2 :(得分:0)

我刚刚用声纳4.5.2尝试了它,仅在声纳上使用。*它绝对不起作用。

看起来sonarqube需要额外的权限才能工作,personnaly我还没有确定哪些,我仍然在数据库上使用全部授权。