【问题标题】:Error: Client does not support authentication protocol requested by server; consider upgrading MySQL client错误:客户端不支持服务器请求的认证协议;考虑升级 MySQL 客户端
【发布时间】:2018-10-29 16:43:18
【问题描述】:

执行 JDBC 程序时,连接数据库时出现以下错误:

Exception in thread "main" 
com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Client does 
not support authentication protocol requested by server; consider upgrading 
MySQL client
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:921)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:885)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3421)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1247)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2775)
at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
at 
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:270)
at main.java.MyFirstJdbcProgram.readDataBase(MyFirstJdbcProgram.java:23)
at main.java.Main.main(Main.java:6)

当我研究这个时,我知道下面的错误是因为我需要向用户授予权限,所以跟随

  1. mysql -u root -p
  2. 然后输入密码
  3. 然后我跑了

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'mypassword';    
    

    我也用过

    UPDATE user SET authentication_string=password('mypassword') WHERE user='root';
    

但是我遇到了错误

ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在第 1 行的 'IDENTIFIED BY 'mypassword'' 附近使用的语法

【问题讨论】:

  • ya ya 我通过运行 C:\Program Files\MySQL\MySQL Server 8.0\bin 升级了> mysql_upgrade -u root -p 输入密码:********** 检查是否更新是需要的。本次安装的MySQL已经升级到8.0.11,如果还需要运行mysql_upgrade,使用--force
  • 您使用的是哪个版本的 MySQL Connector/J?另外,为什么您认为错误“客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端”与授予用户权限有关?你这个想法的来源是什么?
  • 我使用的是 8.0.11 ,使用 MySql Installer 安装
  • 是你使用的MySQL版本,还是MySQL Connector/J(MySQL JDBC驱动)的版本,因为对我来说这个错误似乎表明你使用的是一个比较老的MySQL Connector/ J 驱动程序(即 5.1.45 或更早版本)。
  • 谢谢你,你指出正确,我用的是旧版本的 MySql 连接器,更换新版本时,它工作正常,非常感谢

标签: java mysql jdbc


【解决方案1】:

出现此错误是因为您使用的是 MySQL Connector/J 5.1.45 或更早版本。 MySQL 8 引入了一种新的身份验证机制 (caching_sha2_password),这些版本的驱动程序不支持该机制。

您需要升级到 MySQL Connector/J 5.1.46 或更高版本。撰写本文时 MySQL Connector/J 驱动程序的最新版本是 8.0.15。可以从https://dev.mysql.com/downloads/connector/j/下载或者在Maven/Gradle等中指定正确的版本。

【讨论】:

  • 您好,请问如何更新?我对旧程序有同样的问题。我要升级连接器的吗?我该怎么做?
  • @AlfonsoSilvestri 您需要更新应用程序的 maven(或 gradle)依赖项,或者 - 如果您不使用这些工具 - 您需要自己从 MySQL 站点下载并替换您现有的 MySQL 连接器/J 库。
【解决方案2】:

如果您使用 MySQL-8 安装 Jasper 服务器。 并且您在运行 js-install-ce.bat / js-install-ce.bat test 时遇到错误或“用户 root@localhost 的访问被拒绝”。

  1. 运行mysql查询: SELECT user,authentication_string,plugin,host FROM mysql.user;

检查“root”用户的插件列,它必须是“mysql_native_password”。如果插件值为“caching_sha2_password”,那么您需要运行更新查询: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

  1. 重新安装 MySQL。 您只需使用身份验证方法重新安装 MySQL-8: “Use Legacy Authentication Method(Retain MySQL 5.x Compatibility)”,如快照所示: enter image description here

【讨论】:

    【解决方案3】:

    运行:

    export MYSQL_PW='your_password' 在您的环境中,并在下面的代码中使用“process.env.MYSQL_PW”作为您的密码。

    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'root',  //your root username 
      database : 'your_database',   //the name of your db (create this if you haven't already)
      password : process.env.MYSQL_PW   //your root user's password
    });
    

    【讨论】:

      【解决方案4】:

      您使用的是 MySQL 8.0.17 还是高于 5.7 的版本?卸载此版本,因为此版本使用 SSH 密码加密,这就是他们无法获取我们的数据库密码的原因。安装 5.6 或 5.5 版,然后它工作正常,或者您非常了解问题或我在说什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-19
        • 2018-10-10
        • 2023-03-05
        • 2018-11-03
        • 2018-12-11
        相关资源
        最近更新 更多