ER_NOT_SUPPORTED_AUTH_MODE - MySQL 服务器

IT技术 javascript mysql node.js linux
2021-02-24 02:53:16

无法通过 MySQL JavaScript module连接到 MySQL DB

        我向我的“Node.js”服务器添加了一个“MySQL”数据库在完成“MySQL”设置过程后——确保数据库正常工作——我尝试通过 JavaScript 实际代码片段(下面的示例)连接到服务器,但令我沮丧的是,连接尝试失败了。



当连接失败时,记录了以下错误:

“ER_NOT_SUPPORTED_AUTH_MODE:客户端不支持服务器请求的认证协议;考虑升级 MariaDB 客户端”

        这个错误让我很困惑,因为我已经卸载了"MariaDB",并在它的位置安装了"MySQL"我想知道是什么导致了错误,我该如何修复它才能连接到数据库?



    // This is my attempt of connection

    var mysql = require('mysql');
    
    var connection = mysql.createConnection({
        host     : 'localhost',
        user     : 'root',
        password : '********',
        database : 'foobarDb'
    }); 
6个回答

目前 8.0 版本是更改插件的方法:使用此示例:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
似乎为您的数据库重置架构级别凭据。
2021-04-24 02:53:16
应该先禁用跳过授权表
2021-04-24 02:53:16
第一次看到这个帖子,做点实际的...
2021-05-04 02:53:16
这个答案并不完全意义,因为它是从这篇文章的背景下采取:stackoverflow.com/questions/50093144/...我建议只看它而不是这篇文章。
2021-05-11 02:53:16

在此处输入图片说明

重新配置身份验证方法,在那里选择 5.1 的遗留类型密码支持

错误原因

*您安装了最新的Mysql 8.0,它具有不同的身份验证方法。降级 5.6 或 5.1 是简单的解决方案

我使用终端来运行和管理我的数据库,所以这不是一个选项。不过还是谢谢;)
2021-04-18 02:53:16
这对我有用,但只有在我在 MySql 工作台中创建新用户和连接之后。我无法让它与现有连接一起工作。但现在已经足够了。谢谢你的提示。
2021-05-09 02:53:16

此问答线程中评分最高的答案在很大程度上是准确/有效的,但至少可以说是无组织的。然而,这里有一个解决方案;解决方案是在三个答案中找到的点点滴滴。为了提供一个单一帖子中存在的答案和解决方案更易于阅读和解释,并且全面更有帮助和节省时间,我将尝试用清晰、简洁、有序的说明来回答问题涵盖了 Ubuntu 用户遇到的整个问题。此外,我将添加其他答案中未包含的必要信息,以了解正在解决的问题。就像这个问题不是 SQL 问题,它是一个 Ubuntu。使读者清楚持久性的问题是什么;“ROOT”用户在 Ubuntu 中没有密码。Ubuntu 用户使用 sudo 命令,并通过对几乎所有内容使用 sudo cmd 的许可来组织权限,也有例外,并且有一个 Ubuntu Root 用户选项,但现在在这里讨论这些事情无济于事。需要注意的重要事项如下:

  • Ubuntu 缺少“根密码”,这就是为什么遇到我们正在讨论的问题的每个人都运行 Ubuntu OS/SHELL 发行版的原因。我们不能给 Ubuntu SHELL 一个“ROOT PASSWORD”,但是,我们可以,而且我们将给我们的“MYSQL-COMMUNITY-SERVER”一个“ROOT PWD”。

首先你需要 NPM、NodeJS、MySql 和 NPM 的 MySql 驱动程序。如果您还没有它们,您甚至不应该阅读本文,因为您甚至无法 100% 知道您要解决的问题是否是这样的……

...如果您确实拥有列表中的所有内容,并且正在运行 Ubuntu 发行版,并且收到如下所示的错误身份验证消息和连接错误消息

  • 错误: (28000): 用户 'ajc'@'localhost' 访问被拒绝
  • ERROR: ERROR_NOT_SUPPORTED_AUTH_MODE: 客户端不支持服务器请求的认证协议;考虑升级 MySQL 客户端
  • '客户端不支持服务器请求的认证协议;考虑升级 MySQL 客户端

那么您可能来对地方了。

  • 要解决这个问题,首先创建一个空的 'dot JS' 文件进行测试,将它命名为 'sqltest.js' 或任何你喜欢的名字。

  • 将下面的代码添加到其中。

  • 在名为“createConnection”的方法中,有一个 JSON OBJ 参数,用于保存与 MySql 数据库服务器建立有效连接的凭据值。用户必须等于“root”,并且数据库必须存在。还要为以后的测试添加一个测试表到数据库,其中包含一些 BS 数据。”

let mysql = require('mysql');

let connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : '********',
    database : 'DB_App_00',
});



connection.connect(function(err) {
    if (err) {
      return console.error('error: ' + err.message);
    }
  
    console.log('Connected to the MySQL server.');
  });


现在打开一个终端窗口,并进行典型的更新和升级,这很重要,这就是为什么每个人都要求你这样做。

~$: sudo apt update
~$: sudo apt upgrade

let connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '********', database : 'DB_App_00', });

现在输入以下cmd

~$: sudo mysql -u root

  • 它应该提示你输入你的 Ubuntu 密码,输入它并 [ENTER]。

现在这是可以被视为药物和/或解决问题的方法的步骤。您的终端应该是打开的,并且您应该在 MYSQL Server 中,在用户“root”下。终端应该让光标在空白的 mysql 命令行上闪烁。在 CMDL 中复制并粘贴:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'ChoosePassword';

mysql> FLUSH PRIVILEGES;

  • 下一部分很明显,将“ChoosePassword”更改为您将记住的密码,同时将密码保留在单引号内。绝对不要更改其他内容,按 [ENTER]

  • 如果您正确地遵循了这些步骤,您现在就拥有了一个带有自己密码的 MySQL 'ROOT USER'。通过在 Ubuntu CMDL 中复制并粘贴以下内容来测试它:

 ~$: mysql -u root -p 
  • 它会提示您输入新密码,输入它并 [ENTER]

……你应该进去了,现在退出。

mysql>exit
  • 返回到您的“testsql.js”文件,将用户凭据更改为 root,将密码更改为密码,将有效数据库更改为主机,并将主机更改为 localhost,除非您对不同的主机名有独特的需求。

let connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : '********',
    database : 'DB_App_00',
});


现在使用 node 运行 node 测试文件

~$: node testsql.js

如果没有显示已连接,则说明您做错了,但如果一切顺利,您应该连接。在我开始工作之前需要付出一些努力,但是这个答案应该可以为您节省一些时间来阅读所有其他一半的书面答案。

您可以更改现有用户以使用 mysql_native_password,或创建一个新用户,

CREATE USER 'new_user'@'%' IDENTIFIED WITH mysql_native_password BY '***';
GRANT USAGE ON *.* TO 'new_user'@'%';
ALTER USER 'new_user'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
GRANT ALL PRIVILEGES ON `new_user`.* TO 'new_user'@'%';
FLUSH PRIVILEGES;

用您的新用户名替换 new_user,并设置您的密码。

现在您可以使用 mysql 包从节点访问 mysql,

 npm install mysql

建议为此包使用池连接。

您可以使用该包mysql2而不是mysql. 我遇到了同样的问题并且使用mysql2对我有用。

您可以使用安装此软件包 npm i mysql2

完全完美的解决方案 - thx
2021-05-01 02:53:16