我在连接到公开托管的静态IP mysql服务器时遇到了一个奇怪的问题。
我能够使用MySQL工作台成功地连接到服务器,也可以通过SSH在本地远程服务器上连接。但是,从jdbc (通过NetBeans和本地部署的代码)连接到mysql服务器的尝试失败了。在查看日志时,考虑到用户凭据是本地用户而不是远程用户,代码试图连接远程服务器。因此,用户存在于远程,但java在尝试连接时考虑user@localhost。准确的错误显示为:
由: com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) ~mysql-连接器-java-5.1.27.jar:na在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4237) ~mysql-连接器-java-5.1.27.jar-java-5.1.27.jar-java-5.1.27.jar:com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4237)-5.1.27.jar: java.sql.SQLException:访问被拒绝在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169) ~mysql-连接器-java-5.1.27.jar:na在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:928) ~mysql-连接器-java-5.1.27.jar:na在com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1750) ~mysql-连接器-java-5.1.27.jar:na
我的连接字符串是:
jdbc:mysql://user:password@W.X.Y.Z/
请有人建议如何提及该用户,以便java将其视为远程用户,而不是我的计算机上的本地用户?
发布于 2015-10-07 08:49:07
这里的问题是:
当MySQL工作台连接时,连接是成功的,因为用户是用户名@W.X.Y.Z,它可以完全访问DB。然而,当我使用java进行连接时,它试图连接的用户是userName@JavaServerIP,而不是userName@W.X.Y.Z。因此,由于userName@JavaServerIP没有访问权限,连接尝试失败了。允许用户访问mysql服务器上的DB解决了这个问题。下面是帮助我解决这个问题的命令:
GRANT ALL PRIVILEGES ON my_database.* TO 'my_user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;发布于 2015-10-05 10:43:55
我不知道这是否会解决您的问题,但是您最好使用提供的API进行连接,而不是手动构造连接字符串。
它将使犯错误(这将很难诊断)变得更加困难,并使参数替换变得更容易:
String username = "testuser";
String password = "test123";
String url = "jdbc:mysql://ip-address/databaseName";
Class.forName ("com.mysql.jdbc.Driver").newInstance ();
Connection conn = DriverManager.getConnection (url, username, password);https://stackoverflow.com/questions/32946111
复制相似问题