首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >到远程MySQL DB的JDBC连接失败;

到远程MySQL DB的JDBC连接失败;
EN

Stack Overflow用户
提问于 2015-10-05 10:14:41
回答 2查看 1.3K关注 0票数 1

我在连接到公开托管的静态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将其视为远程用户,而不是我的计算机上的本地用户?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-07 08:49:07

这里的问题是:

当MySQL工作台连接时,连接是成功的,因为用户是用户名@W.X.Y.Z,它可以完全访问DB。然而,当我使用java进行连接时,它试图连接的用户是userName@JavaServerIP,而不是userName@W.X.Y.Z。因此,由于userName@JavaServerIP没有访问权限,连接尝试失败了。允许用户访问mysql服务器上的DB解决了这个问题。下面是帮助我解决这个问题的命令:

代码语言:javascript
复制
GRANT ALL PRIVILEGES ON my_database.* TO 'my_user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
票数 0
EN

Stack Overflow用户

发布于 2015-10-05 10:43:55

我不知道这是否会解决您的问题,但是您最好使用提供的API进行连接,而不是手动构造连接字符串。

它将使犯错误(这将很难诊断)变得更加困难,并使参数替换变得更容易:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32946111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档