Я установил 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());
}
Может ли кто-нибудь помочь мне, что мне не хватает?
Попробуйте подключиться к 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;
По вашему сценарию, я думаю, вы должны были использовать
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()); } }
Он работает без ошибок. Я не вижу здесь никаких проблем. Посмотрите на него.
Вы действительно подключаетесь к локальной машине? Если нет, вы должны заменить "localhost" описанием вашего хоста.
flush
?