我正在测试一个连接到DB并获取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)
我使用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没有关闭,但我认为这不是问题的原因。
答案 0 :(得分: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上安装它(阅读上一个链接中的文档)
答案 1 :(得分:0)
我遇到了同样的问题并设法通过更改jdbc驱动程序来修复它。我使用了MariaDB jdbc驱动程序:
(来自Spring配置文件)
希望这会有所帮助。