当前位置: 首页 > 知识库问答 >
问题:

错误:客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端

陈开宇
2023-03-14

在执行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)

当我研究这个问题时,我知道下面的错误是因为我需要授予用户特权,所以请遵循

>

  • MySQL-u root-p
  • 然后输入密码
  • 然后我跑了

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

    我还用了

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

    但我得到了低于误差

    错误1064(42000):您的SQL语法中有错误;查看与您的MySQL服务器版本相对应的手册,以了解第1行“Identified BY'myPassword''”附近使用的正确语法

  • 共有3个答案

    黄骏喆
    2023-03-14

    您使用的是MySQL8.0.17或5.7以上版本吗?卸载这个版本,因为这个版本使用SSH密码加密,这就是为什么我们的数据库密码他们不能接受。安装版本5.6或5.5,然后它工作良好,或者您很好地理解了什么问题或我在说什么。

    许阿苏
    2023-03-14

    运行:

    在您的环境中导出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
    });
    
    松铭
    2023-03-14

    发生此错误的原因是您使用的是MySQL Connector/J5.1.45或更早版本。MySQL8引入了一种新的身份验证机制(caching_sha2_password),该机制在这些版本的驱动程序中不受支持。

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

     类似资料:
    • 问题内容: 执行JDBC程序时,连接到数据库时出现以下错误: 在研究此问题时,我知道以下错误是因为我需要向用户授予特权,所以请按照以下步骤操作 然后输入密码 然后我跑了 我也用过 但是我正在错误以下 错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的’IDENTIFIED BY’mypassword’附近使用 问题答案: 发生

    • 问题内容: 由于某种原因,我无法与服务器建立简单连接。我使用默认设置安装了最新的MySQL Community 8.0数据库以及Node.JS。 这是我的node.js代码 以下是在命令提示符中发现的错误: 我已经阅读了一些内容,例如: https //dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqlj

    • 我阅读了一些内容,例如:https://dev.mysql.com/doc/refman/5.5/en/old-client.htmlhttps://github.com/mysqljs/mysql/issues/1507 但我仍然不确定如何解决我的问题。如有任何帮助,将不胜感激:

    • 我正在docker容器中运行我的应用程序,其中flyway迁移工具在连接到MySQL DB(8.0.11)时出错:下面是完整的错误: 这是我的docker-compose.yml: 有谁能帮我一下。谢谢

    • 任务:将Kerberos active directory身份验证添加到不安全的报告和数据操作桌面应用程序。此应用程序是。。。 用Stackless Python 2.7编写 使用Twisted进行客户端-服务器交互 客户端编译为exe并在Windows上运行 服务器在Linux(红帽)上运行 目前,我们从用户帐户中提取Windows网络ID(登录名)并传递到服务器,服务器会查找用户配置为具有的权

    • 授权服务器为进行客户端身份验证的目的,为Web应用客户端创建客户端凭据。授权服务器被鼓励考虑比客户端密码更强的客户端身份验证手段。Web应用程序客户端必须确保客户端密码和其他客户端凭据的机密性。 授权不得向本地应用程序或基于用户代理的应用客户端颁发客户端密码或其他客户端凭据用于客户端验证目的。授权服务器可以颁发客户端密码或其他凭据给专门的设备上特定安装的本地应用程序客户端。 当客户端身份验证不可用