Не удается подключиться к MySQL программно

0

Я установил mysql (mariadb) в linux machiche. Я создал пользователя 'newuser', как:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

когда я делаю:

select user,password from user;

я могу видеть:

+--------------+-------------------------------------------+
| user         | password                                  |
+--------------+-------------------------------------------+
| root         | *password                                 |
| newuser      | *password                                 |
+--------------+-------------------------------------------+

и когда я выполняю эту команду:

select user();

+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+

Я пытаюсь подключиться к моей базе данных с помощью java, но я становлюсь ниже исключения:

java.sql.SQLException: Cannot create connection:Access denied for user 'newuser'@'localhost' (using password: YES)

+------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for newuser@localhost                                                                                                              |
+------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost' IDENTIFIED BY PASSWORD '*7ABDF971526E9441B919C9FE77D50DB0363B3509' WITH GRANT OPTION |
+------------------------------------------------------------------------------------------------------------------------------------------------+

Код Java для подключения к db:

try {
        Class.forName("com.mysql.jdbc.Driver");
    //  Connection connection = DriverManager.getConnection(connectionString);
        Connection connection = DriverManager.getConnection("jdbc:mariadb://localhost:3306/iot?autoReconnect=true","newuser","password");
        System.out.println("Connected --->"  + connection);
        return connection;
    } catch (SQLException e) {
        throw new SQLException("Cannot create connection:" + e.getMessage());
    } 

Может ли кто-нибудь помочь мне, что мне не хватает?

  • 0
    ты flush ?
  • 0
    @FedericoklezCulloca да, я использовал привилегии сброса;
Показать ещё 10 комментариев
Теги:

3 ответа

1

Попробуйте подключиться к mysql и сделать

update user set host = '%' where user = 'newuser';
flush privileges;

Попробуйте снова подключиться. Если вам удастся тогда (как я подозреваю), вы НЕ запускаете код на той же машине, что и mysql. Вам нужно найти ip вашего локального компьютера (ifconfig на linux, ipconfig на windows) и выполнить

update user set host = 'xxx.xxx.xxx.xxx.' where user = 'newuser';
flush privileges;

чтобы разрешать соединения только с вашего ip (xxx.xxx.xxx.xxx).

Для отмены изменений выполните

update user set host = 'localhost' where user = 'newuser';
flush privileges;
  • 0
    теперь он подключается, но я хочу знать одну вещь: я запускаю mysql на rashbeery и пытаюсь подключиться с помощью удаленного компьютера, используя mysql workbench, почему он не подключается из workbench. Нужно ли разрешить TCP-соединение для удаленного подключения?
  • 0
    Вероятно, вы пытаетесь подключиться из рабочей среды как пользователь root, поэтому вам нужно перезапустить процедуру для пользователя root или использовать параметр в рабочей среде, чтобы использовать туннель ssh. Поскольку вам удалось подключиться, и мой ответ поможет вам определить и решить проблему, не могли бы вы отметить мой ответ как решение? Благодарю.
0

По вашему сценарию, я думаю, вы должны были использовать

    FLUSH PRIVILEGES; 

В случае изменения привилегии FLUSH не требуется, поскольку она будет перезагружена, но здесь вы создаете нового пользователя и предоставляете новые привилегии новому пользователю, поэтому попробуйте использовать FLUSH PRIVILEGES.

Я использовал следующие шаги, и он отлично работает здесь:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

Теперь войдите в систему с новым пользователем newuser: -

     mysql -u newuser -p
     password
     show GRANTS;
    Output:- 
    +------------------------------------------------------+
    | Grants for newuser@localhost                         |
    +------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost' |
    +------------------------------------------------------+
 

Как select user() - Покажет текущего пользователя, который вошел в систему.
SELECT User FROM mysql.user ---It покажет всех пользователей, созданных в mysql.

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        //  Connection connection = DriverManager.getConnection(connectionString);
            Connection connection = DriverManager.getConnection("jdbc:mariadb://localhost:3306/iot?autoReconnect=true","newuser","password");
            System.out.println("Connected --->"  + connection);
        } catch (SQLException e) {
            throw new SQLException("Cannot create connection:" + e.getMessage());
        } 

        }

Он работает без ошибок. Я не вижу здесь никаких проблем. Посмотрите на него.

  • 0
    ПРИВИЛЕГИИ ПРОМЫВКИ; не требуется, и если вы внимательно прочитаете комментарии, он попробовал это безуспешно.
  • 0
    Да уж ! Тогда это проблема IP, поскольку 10.1.23-MariaDB-9 + deb9u1 Raspbian 9.0 должен подключаться по разным адресам. Это не проблема привилегий. java.sql.SQLException: Невозможно создать соединение означает, что оно должно подключаться к другому хосту, так как пароль и имя пользователя кажутся правильными.
0

Вы действительно подключаетесь к локальной машине? Если нет, вы должны заменить "localhost" описанием вашего хоста.

  • 1
    @danielmetzer Что ты на самом деле хочешь сказать?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню