0

我正在测试一个连接到数据库并获取 my_test 表详细信息的简单程序。

我得到了例外java.sql.SQLException: Unable to load authentication plugin.

堆栈跟踪

java.sql.SQLException: Unable to load authentication plugin ''.
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:923)
        at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1715)
        at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1244)
        at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2412)
        at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445)
        at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230)
        at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)
        at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
        at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
        at java.sql.DriverManager.getConnection(DriverManager.java:579)
        at java.sql.DriverManager.getConnection(DriverManager.java:221)
        at TestRoot.main(TestRoot.java:19)

我正在使用驱动程序作为 MySQL。我的数据库是 mariadb-5.5.30。

      Connection con=null;
      Statement st=null;
      ResultSet rs=null;
      String firstName="";
      try
      {
              Class.forName("com.mysql.jdbc.Driver");

              con=DriverManager.getConnection("jdbc:mysql://localhost:3306/my_test","root","");
              st=con.createStatement() ;
              rs=st.executeQuery("SELECT * FROM test") ;
              while(rs.next())
              {
                      firstName=rs.getString(2);
                      System.out.println(firstName);
              }

      }
      catch(Exception err)
      {
              System.out.println(err.toString());
      }

我知道 Connection,ResultSet 没有关闭,但我认为这不是问题的原因。

4

2 回答 2

1

你可能想看看这里:https ://mariadb.atlassian.net/browse/MDEV-3935

当 mysql.user 表上设置的密码使用较旧的格式 - 形式为 7f84554057dd964b(我认为是“badpwd”)而不是像 *AAB3E285149C0135D51A520E1940DD3263DC008C 之类的较新形式时,就会出现问题。

如 MDEV-545 中所述重置用户记录的密码确实解决了问题,因为它升级了表中的密码格式。


来自 MariaDB 文档:https ://mariadb.com/kb/en/pam-authentication-plugin/

注意:Windows 不使用 PAM,因此 PAM 身份验证插件在 Windows 上不起作用。但是,可以使用 Windows 客户端连接到 MariaDB 服务器——例如在 Linux 或 Solaris 上——它确实使用了 PAM 身份验证插件。请参阅此示例。

据我了解,您应该在 linux 上安装它(阅读上一个链接中的文档)

于 2013-09-06T07:08:15.703 回答
0

我有同样的问题,并设法通过更改 jdbc 驱动程序来解决它。我使用了 MariaDB jdbc 驱动程序:

(来自 Spring 配置文件)

希望这会有所帮助。

于 2014-11-14T12:59:54.473 回答