Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tomcat+MySQL:通过Tomcat应用程序访问MySQL时“授权规范无效”_Mysql_Tomcat - Fatal编程技术网

Tomcat+MySQL:通过Tomcat应用程序访问MySQL时“授权规范无效”

Tomcat+MySQL:通过Tomcat应用程序访问MySQL时“授权规范无效”,mysql,tomcat,Mysql,Tomcat,我的任务是更换现有Apache/Tomcat/MySQL应用程序正在运行的硬件。旧机器正在运行Ubuntu,而新机器有一个全新的Debian Squeeze 64位安装 我已经复制了几乎所有的内容,在新的数据库服务器上备份和恢复了数据库。我已将应用程序服务器上应用程序中的数据库连接参数替换为新数据库服务器的IP地址 可以在命令行上访问数据库,而不会出现任何问题。但是,使用Tomcat应用程序访问数据库时会出现以下错误消息: Exception while connecting to databa

我的任务是更换现有Apache/Tomcat/MySQL应用程序正在运行的硬件。旧机器正在运行Ubuntu,而新机器有一个全新的Debian Squeeze 64位安装

我已经复制了几乎所有的内容,在新的数据库服务器上备份和恢复了数据库。我已将应用程序服务器上应用程序中的数据库连接参数替换为新数据库服务器的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)
当我试图用谷歌搜索这个问题时,我发现很多人多年来都遇到了同样的问题,但没有多少人找到了真正的解决办法。到目前为止,我所尝试的:

将Tomcat应用程序正在使用的登录名的主机参数更改为%, 不是授予所有特权,而是授予Tomcat正在使用的用户SELECT、INSERT等个人特权 这两个都是我在网上找到的建议,都没有帮助

我担心这有点深奥,比如用来访问MySQL数据库的旧的.jar与最新版本的MySQL不兼容,但没有这么说。我希望找到一个解决方案,不需要重新处理转移的应用程序,所以我要求你们

我可以提供你需要的任何信息

谢谢。

用户“root@”srvbisonapp.local“使用密码”的访问被拒绝:是

您可以通过执行此命令来检查此用户的previledges

show grants for 'root'@'srvbisonapp.local';
并查看此用户具有哪些权限

此外,此错误清楚地表明此用户的身份验证详细信息是错误的,您可以 使用MySQL的根帐户更改现有用户的密码

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

在Tomcat应用程序中对连接参数进行必要的更改,这应该会起作用

我收到了相同的错误消息,解决起来几乎不那么容易。我的用户可以使用相同的密码进行身份验证,许多SQL语句工作正常。经过一两个小时的调试,我把它缩小到一个SELECT语句,它引用了一个使用SQL安全定义器定义的视图,以及一个已从用户数据库中删除的定义器。删除deleteduser之前,视图是这样创建的:

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

我认为这是MySQL中的一个小错误。错误消息应报告授权deleteduser而不是已授权的loggedinuser时出现问题。该死的。我发现了错误。应用程序使用的密码与我认为的不同。构建脚本在构建期间更改了配置文件,因此我使用一个密码手动测试了访问权限,而应用程序使用了另一个密码。非常感谢您的帮助,因为我根据您的评论进行了仔细检查,所以我将接受此作为解决方案。谢谢
CREATE 
DEFINER = `deleteduser`@`%` 
SQL SECURITY DEFINER
VIEW myview AS
...