mysql - JDBC 连接 : access denied

标签 mysql ssl jdbc

我正在尝试通过 SSL 与 mysql 建立 JDBC 连接。 我已经将有效证书导入到 cacertsSSL.jks 文件中。 我仍然无法连接。

有没有办法不扩展或更改驱动程序?

public static void getMysqlConnection() {
    Connection connection = null;
    try {

      Class.forName("com.mysql.jdbc.Driver");
      Driver driver = DriverManager.getDriver(URL);
      DriverPropertyInfo[] info = driver.getPropertyInfo(URL, null);

      String URL = "jdbc:mysql://myHost:3307/myDB?verifyServerCertificate=false&requireSSL=true&useSSL=true";
      String USER = "myUser";
      String PASSWORD = "myPwd";

      System.setProperty("javax.net.ssl.keyStore", "C:\\Development\\cacertsSSL.jks");
      System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
      System.setProperty("javax.net.ssl.trustStore", "C:\\Development\\cacertsSSL.jks");
      System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

      Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
      System.out.println(conn);
    } catch (Exception e) {
      System.out.println("Connection Failed! Check output console");
      e.printStackTrace();
      return;
    }
  }

下面是连接错误堆栈跟踪

java.sql.SQLException: Access denied for user 'myuser'@'myHost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:910)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3923)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1273)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
at com.test.Test1.getMysqlConnection(Test1.java:152)
at com.test.Test1.main(Test1.java:25)

回答: 这是它起作用的原因:

  String URL = "jdbc:mysql://myHost:3307/myDB?useSSL=true";
  String USER = "myUser";
  String PASSWORD = "myPwd";

  System.setProperty("javax.net.ssl.trustStore", "C:\\Development\\cacertsSSL.jks");
  System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

在这种情况下,只有 TrustStore 就足够了,在我的情况下,只有 useSSL 有效。 谢谢。

最佳答案

您输入的用户名或密码有误,或者您无法以该用户身份从该主机进行连接。但这也表明 SSL 部分工作正常。

关于mysql - JDBC 连接 : access denied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20625818/

相关文章:

java - 通过java swing向数据库插入数据

mysql - (mysql) 如何在与另一个表连接时在 where 条件下添加通配符?

mysql - 无法在 Eclipse CDT Juno 中使用 mysql 函数

asp.net - 如何完全编写导入 SSL 证书并将此证书绑定(bind)到特定站点的过程的脚本

java - Java 中的 SSL CA 证书

ruby-on-rails - Vimeo Rails 设计 OmniAuth SSL 错误仅限 Windows

tomcat - 为什么 JDBC 驱动程序调用在 Tomcat 中有效,但在 JBOSS 中无效

php - 如何在mysql中使用inner join或group by从两个表中获取所有余额值?

mysql - 我如何在表中存储项目的重复项?

java - JDBC PreparedStatement,如何选择和插入?