0

DB に接続して my_test テーブルの詳細を取得する単純なプログラムを 1 つテストしています。

私は例外を取得しています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)

Driverを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 テーブルに設定されたパスワードが、新しい形式である *AAB3E285149C0135D51A520E1940DD3263DC008C のような形式ではなく、7f84554057dd964b (これは「badpwd」と思われます) という形式の古い形式を使用している場合に発生します。

MDEV-545 に記載されているようにユーザー レコードのパスワードをリセットすると、表のパスワード形式がアップグレードされるため、問題は解決します。


MariaDB ドキュメントから: https://mariadb.com/kb/en/pam-authentication-plugin/

注: Windows は PAM を使用しないため、PAM 認証プラグインは Windows では機能しません。ただし、Windows クライアントを使用して、PAM 認証プラグインを使用する Linux や Solaris などの MariaDB サーバーに接続できます。この例を参照してください。

私が理解していることから、Linuxにインストールする必要があります(前のリンクからドキュメントを読んでください)

于 2013-09-06T07:08:15.703 に答える
0

私は同じ問題を抱えていましたが、jdbc ドライバーを変更することで問題を解決できました。MariaDB jdbc ドライバーを使用しました:

(Spring 構成ファイルから)

これが役立つことを願っています。

于 2014-11-14T12:59:54.473 に答える