2017-02-13 2 views
0

Я пытаюсь подключиться к удаленному серверу в Java, от внутрибрюшинно 111.111.111.111 до 111.111.111.222 внутрибрюшинно с разъемом JDBC:Установить хост пользователя MySQL в связи JDBC Java

conn = DriverManager.getConnection("jdbc:mysql://"+serverAddress+":3306/" + this.dBName + "?" + "user=" + this.userName + "&password=" + this.password + ""); 
  • [email protected] .111.111 создается в базе данных, и GRANTS работают нормально.
  • Пользователь @ localhost не существует в базе данных, потому что я думаю, что это не обязательно.
  • Брандмауэр разрешает подключение.

По какой-то причине, когда я пытаюсь запустить соединение генерируется исключение:

java.sql.SQLException: The user specified as a definer ('user'@'localhost') does not exist 

но я запрашивающий соединение с внутрибрюшинно 111.111.111.111

Примечание: когда я напишите @ в имени пользователя, это показывает правильный IP-адрес хоста, но с дополнительным @, например:

java.sql.SQLException: Access denied for user '[email protected]'@'111.111.111.111' (using password: YES) 

Итак, что я делаю неправильно? или как установить хост имени mysql?

EDIT:

Кроме того, я опробованный терминал подключение MySQL и работает должным образом: (так @ SSS ф является 111.111.111.111)

[email protected]:~$ mysql -h 111.111.111.222 -u user -p dbname 
Enter password: 
Reading table information for completion of table and column names 
You can turn off this feature to get a quicker startup with -A 

Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 85 
Server version: 5.7.17 MySQL Community Server (GPL) 

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. 

Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> show tables; 
+---------------------+ 
| Tables_in_dbname | 
+---------------------+ 
| wh_with_customer | 
+---------------------+ 
10 rows in set (0,00 sec) 
+1

'user' does't имеют привилегию соединяться с MySQL. Вы должны дать 'user' разрешение – haifzhan

+0

« потому что я думаю, что это не обязательно ». - проверьте свои предположения. – duffymo

+0

@duffymo, потому что я просто подключаюсь к базе данных удаленно. Так что это необходимо? –

ответ

1

Вы не предоставили привилегии в user с моей точки зрения

GRANT ALL PRIVILEGES ON *.* TO 'user'@'111.111.111.111' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION; 

Выполнить его и заменить PASSWORD с йо ур реальный пароль.

В качестве альтернативы, попробуйте использовать DriverManager.getConnection(String url, String user, String password) кроме

DriverManager.getConnection("jdbc:mysql://"+serverAddress+":3306/" + this.dBName + "?" + "user=" + this.userName + "&password=" + this.password + ""); 

DriverManager.getConnection(String url) ожидает URL в формате jdbc:subprotocol:subname, getConnection(url, username, password) является более точным

+0

Это результат: 'шоу-гранты ->; + ------------------------------------------------ -------------------------------------------------- ---- + | Гранты для пользователя@111.111.111.% | + ------------------------------------------------ -------------------------------------------------- - + | GRANT USAGE ON *. * TO 'user'@'111.111.111.%' | | GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE, SHOW VIEW ON 'dbname'. * TO 'user'@'111.111.111.%' | 2 строки в наборе (0,00 сек) ' –

+0

и я просто попытался с' Conn = \t \t \t \t \t DriverManager.getConnection ("JDBC: MySQL: //" + АдресСервера + ": 3306 /" + это. dBName + "", this.userName + "", this.password); 'но он все еще показывает' java.sql.SQLException: Пользователь, указанный как определитель ('user' @ 'localhost'), не существует' Но i 'm не запрашивать с localhost, а из другого ip. Спасибо @HaifengZhang –

+0

запустите 'GRANT ALL PRIVILEGES ON *. * TO 'user' @ 'localhost' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;' и 'FLUSH PRIVILEGES' – haifzhan

Смежные вопросы