Tomcat + MySQL: «Неверная спецификация авторизации» при доступе к MySQL через приложение Tomcat - PullRequest
1 голос
/ 19 января 2012

Мне было поручено заменить оборудование, на котором работает существующее приложение Apache / Tomcat / MySQL. На старых машинах установлена ​​Ubuntu, а на новых машинах установлена ​​чистая и свежая 64-битная версия Debian Squeeze.

Я скопировал почти все, сделал резервную копию и восстановил базу данных на новом сервере базы данных. Я заменил параметры подключения к базе данных в приложении на сервере приложений на IP-адрес нового сервера базы данных.

Доступ к базе данных можно получить без проблем в командной строке. Однако при доступе к базе данных с помощью приложения Tomcat появляется следующее сообщение об ошибке:

Exception while connecting to database: java.sql.SQLException: Invalid authorization specification message from server: "Access denied for user 'root'@'srvbisonapp.local' (using password: YES)"
java.sql.SQLException: Invalid authorization specification message from server: "Access denied for user 'root'@'srvbisonapp.local' (using password: YES)"
java.lang.NullPointerException
java.sql.SQLException: Invalid authorization specification message from server: "Access denied for user 'root'@'srvbisonapp.local' (using password: YES)"
  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2001)
  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1907)
  at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:2524)
  at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:818)
  at com.mysql.jdbc.Connection.createNewIO(Connection.java:1808)
  at com.mysql.jdbc.Connection.<init>(Connection.java:452)
  at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
  at java.sql.DriverManager.getConnection(DriverManager.java:620)
  at java.sql.DriverManager.getConnection(DriverManager.java:222)
  at de.branion.db.mysql.DBConnection.connect(DBConnection.java:107)
  at de.branion.db.mysql.DBConnection.connectPermissions(DBConnection.java:41)
  at de.branion.permissions.User.loadFromDB(User.java:75)
  at de.branion.permissions.User.login(User.java:360)
  at org.apache.jsp.login_jsp._jspService(login_jsp.java:133)
  at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
  at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
  at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
  at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
  at java.lang.Thread.run(Thread.java:636)

Доступ к базе данных с неверными учетными данными не работает, и он выдает другое сообщение об ошибке. Так что проблема не в реальных учетных данных. Как я уже сказал, доступ по-прежнему работает в командной строке, используя

mysql -u root -p

Когда я попытался решить проблему, я увидел, что многие из них сталкивались с подобными проблемами на протяжении многих лет, но не у многих было реальное решение. Что я пробовал до сих пор:

  • Изменение параметра Host для имени входа, которое использует приложение Tomcat (находится в сообщении об ошибке), на "%",
  • Предоставление не «ВСЕ» привилегий, но предоставление индивидуальных привилегий (SELECT, INSERT и т. Д.) Пользователю Tomcat использует

Оба были предложения, которые я нашел в сети, и оба не помогли.

Боюсь, что это что-то эзотерическое, например старый .jar, используемый для доступа к базам данных MySQL, не совместим с новой (недавней) версией MySQL, но не говорит об этом. Я надеюсь найти решение, которое не требует доработки переданного приложения, поэтому я прошу вас, ребята.

Я могу предоставить любую необходимую вам информацию.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 06 мая 2016

Я получил то же сообщение об ошибке, и это было не так легко решить.Мой пользователь мог аутентифицироваться, используя тот же пароль, и многие операторы SQL работали нормально.После часа или двух отладок я сократил это до одного оператора SELECT, который ссылался на VIEW, определенный с помощью SQL SECURITY DEFINER и DEFINER, который был удален из пользовательской базы данных.Представление было создано таким образом до того, как был удален "deleteuser":

CREATE 
DEFINER = `deleteduser`@`%` 
SQL SECURITY DEFINER
VIEW myview AS
...

Я думаю, что это небольшая ошибка в MySQL.Сообщение об ошибке должно было сообщить о проблеме авторизации удаленного пользователя вместо loggedinuser, который уже был авторизован.Я сообщил об ошибке здесь .

0 голосов
/ 19 января 2012

Доступ запрещен для пользователя 'root'@'srvbisonapp.local' (using password: YES)

Вы можете проверить привилегии для этого пользователя, выполнив эту команду,

show grants for 'root'@'srvbisonapp.local';

и посмотреть, какие привилегии имеет этот пользователь.

Также эта ошибка ясно указывает на то, что детали аутентификации неверны для этого пользователя. Вы можете изменить пароль существующего пользователя, используя учетную запись root MySQL

GRANT USAGE ON *.* TO 'root'@'srvbisonapp.local' IDENTIFIED BY 'password_you_wish';
FLUSH PRIVILEGES; 

Внести необходимые изменения в параметр соединения в приложении Tomcat, это должно работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...