Невозможно получить доступ к базе данных Sonar MySQL. Причина: java.sql.SQLException: доступ запрещен для пользователя 'sonar'@'glassfishdev.ccs.local' (используя пароль: ДА) - PullRequest
2 голосов
/ 30 августа 2011

Я пытаюсь добавить Sonar в мою систему сборки Continuous Integration. Я использую ANT в качестве сценария сборки и использую sonar-ant-task-1.1.jar для sonar для генерации отчетов на основе моего исходного кода в SVN.

Проблема Когда сборка запускается и запускает задачу Sonar 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. Добавлен следующий в мой скрипт сборки

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 ]

5 голосов
/ 31 августа 2011

Решением было запустить следующую команду:

GRANT ALL ON *. * TO 'sonar' @ '%';

2 голосов
/ 02 февраля 2014

Правильное решение таково:

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

Как объяснено здесь , соединения с localhost происходят через сокет домена UNIX. Скорее всего, вы входите в систему как локальный пользователь как анонимный пользователь (например, '' @localhost).

0 голосов
/ 12 января 2015

Я только что попробовал это с сонаром 4.5.2 с грантами только на сонар. * И он определенно не работает.

Похоже, что sonarqube требует дополнительных привилегий для работы, лично я еще не определил, какие из них, и я все еще использую грант в базе данных.

...