ER_NOT_SUPPORTED_AUTH_MODE-MySQL 服务器

2024-10-25 08:42:00
admin
原创
205
摘要:问题描述:连接Node.js Server失败MySQL-Database       我曾在“Node.js 服务器”上安装了MariaDB,但后来决定改用 SQL 数据库。我卸载并彻底删除了“MariaDB”,之后,我继续安装“社区版”的“MySQL 数据库”。在完成整个 “MySQL 安装过程” 后...

问题描述:

连接Node.js Server失败MySQL-Database


       
我曾在“Node.js 服务器”上安装了MariaDB,但后来决定改用 SQL 数据库。我卸载并彻底删除了“MariaDB”,之后,我继续安装“社区版”的“MySQL 数据库”。在完成整个 “MySQL 安装过程” 后,我多次尝试通过 JavaScript 文档连接数据库,该文档实现了 JS DB 连接的实际代码片段 — —我的 DB 连接文档发布为下面的代码片段— — 如下面的代码片段所示*。令人失望的是,每次尝试时 JS/SQL 连接都会失败。

这是我收到的连接失败错误消息:



"ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication
protocol requested by server. Consider upgrading MariaDB client."

我正在使用的 JS/SQL 连接代码片段:



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


解决方案 1:

对于 MySQL v8.0,请使用以下命令:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'

您应该root用用户名和password我们要分配的密码替换。

完成后请FLUSH PRIVILEGES;按顺序激活它。

解决方案 2:

您可以使用包mysql2代替mysql。我遇到了同样的问题,使用mysql2对我有用。

您可以使用以下方式安装此包npm i mysql2

解决方案 3:

在此处输入图片描述

您需要Quick Action Settings点击“重新配置链接”来重新配置,如下面的屏幕截图所示。从那里,选择“旧密码”v5.1

错误原因:


您安装了最新的“MySQL版本v8.0最新版本具有不同的加密插件,用于在登录时对用户进行身份验证。5.6 和 5.1 恢复为以前的加密算法。请注意,5.6Oracle5.1报告了几个安全漏洞。

解决方案 4:

此问答线程中评分最高的答案大部分都有效,但它们毫无条理,至少可以这么说。这里有一个解决方案,但是,该解决方案是其他三个答案中的零碎部分。为了提供一个单一解决方案、更有帮助且节省时间的答案,我将尝试以清晰、简洁和有序的方式自己编写答案。我将介绍Ubuntu用户遇到的所有问题,此外,我将添加有用的信息(其他任何答案中都没有包含),这将有助于读者了解他们一直存在的问题。

首先:这个问题不是 SQL 问题,而是 Ubuntu 问题

对您来说持续存在的问题与以下事实有关(大多数软件开发人员/IT 专业人员可能都已经意识到这一事实),即用户'ROOT'在 Ubuntu 中没有密码,任何有$ sudo权限的人都可以访问该密码。为了向遇到此问题并且可能不熟悉我抛出的一些语义的任何人提供清晰度;Ubuntu 用户使用命令sudo -i 注册为Root-user,而现有的其他每个 Linux 发行版都使用带有密码的用户 ID。事实上,除了数据库管理之外,我不记得曾经需要成为 ROOT 用户来执行任何其他操作,而且只在我第一次将数据库安装到服务器时才需要,尽管与一些 IT 专业人员相比,我的经验可能非常有限。我的观点是,通常使用sudo用于所有工作,但在这种情况下它是有问题的,因此需要注意的重要事项如下:

问题:


Ubuntu 缺少“根密码”,这就是为什么遇到我们正在讨论的问题的每个人都运行 Ubuntu OS/SHELL 的发行版。除非我们重写 Ubuntu 内核以及操作系统中的几乎所有其他内容,否则我们无法为 Ubuntu SHELL 提供“根密码”

解决方案:

我们可能无法为 Ubuntu SHELL 提供 root 密码,但我们可以并且将会为MySQL提供'ROOT PASSWORD'


要执行解决方案,您需要具备以下条件:

  1. Node.js v12+

  2. NPM(可能需要 v5+,但不要引用我的话)

  3. MySQL v8.0+(显然)

  4. MySQL 驱动程序(来自 npm)

确认:

如果您还没有列出清单上的所有内容,那么您真的不能说这是您要处理的问题。
如果你确实拥有清单上的所有东西

并且您正在运行 Ubuntu 发行版,那么您应该会收到一条错误消息,该消息可能看起来像我在修复此问题时收到的错误消息。

我的错误信息如下:
ERROR: (28000): Access denied for user 'ajc'@'localhost' 
ERROR: ERROR_NOT_SUPPORTED_AUTH_MODE: Client does not support
authentication protocol requested by server; consider upgrading 
MySQL client

'Client does not support authentication protocol requested by server; consider upgrading MySQL client

如果您仍在阅读,那么您很可能来到了正确的地方。
  1. 要开始修复该问题,请创建一个空的Node.js项目,并使用 NPM 将 MySQL 驱动程序作为依赖项安装到该项目(您应该知道如何执行此操作,因为您必须这样做才能解决此问题)。添加一个 JavaScript.js文件。调用该文件,sqltest.js或类似的东西。

  2. 将以下代码添加到您刚刚创建的文件中。

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.');
  });

  1. 在名为“createConnection”的方法中有一个 JSON OBJ 参数,其中包含与MySQL数据库服务器建立有效连接的凭证值。用户必须等于“root”,并且数据库必须存在。此外,为了以后的测试,请向数据库添加一个测试表,其中包含一些 BS 数据。”

  2. 现在打开一个终端窗口,进行常规更新和升级,这很重要,这就是为什么每个教程都要求您这样做。

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

  1. 升级完成后,在终端中输入以下命令:

~$: sudo mysql -u root

  1. 它会提示您输入 Ubuntu 密码,输入后按 [ENTER]。

下一步至关重要:
  1. 现在,这一步可以被视为问题的良药和/或解决办法。您的终端应该已打开,并且您应该位于 MYSQL 服务器内部,以用户“root”身份运行。终端应该有一个光标在空白的 mysql 命令行处闪烁。在 CMDL 中复制并粘贴以下内容:


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

mysql> FLUSH PRIVILEGES;

  1. 接下来的部分很明显,将“ChoosePassword”更改为您能记住的密码,同时将密码放在单引号内。其他什么都不要改,按 [ENTER]

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

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

...您应该进来了,现在退出。

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


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


  1. 现在使用 node 运行节点测试文件

~$: node testsql.js
最后的想法:

如果没有显示已连接,则表示您做错了什么,但如果一切顺利,则应该可以连接。我花了一些功夫才让它工作,但这个答案应该可以为您节省一些时间,让您不必阅读其他半写半写的答案。

解决方案 5:

您可以更改现有用户以使用 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 包从 node 访问 mysql,

 npm install mysql

建议对此包使用池连接。

解决方案 6:

我觉得有些 MySQL 版本的连接建立身份验证有点混乱。我所要做的就是在凭证"insecureAuth" : true中添加这一行CreateConnection(...)

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '********',
  database : 'vod_bill_database',
  insecureAuth : true
}); 

错误现已消失,客户端已成功连接。

解决方案 7:

第一次运行此代码 ->

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

第二

flush privileges;

解决方案 8:

尝试旧版本的 mysql,例如 5.6.40,它默认使用 SHA256_password 身份验证,而新版本 8.0. 默认使用更安全的 sha2_password 身份验证并抛出此身份验证协议错误。MYSQL
安装程序 5.6.40

解决方案 9:

黄色哟兄弟!

// mysql.ts
const pool = mysql.createPool({
    connectionLimit: 10,
    host: "localhost",
    user: "root",
    password: "password",
    database: "rest-resume-api",
});

然后我有一个docker-compose文件,例如

# docker-compose.yml

version: '3.3'

services:
  db:
    image: mysql
    restart: always
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_DATABASE: 'rest-resume-api'
      MYSQL_USER: 'root'
      MYSQL_ROOT_PASSWORD: 'password'
    ports:
      - '3306:3306'
    expose:
      - '3306'
    volumes:
      - my-db:/var/lib/mysql2
volumes:
  my-db:

解决方案 10:

你能做到

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'

FLUSH PRIVILEGES;

检查mysql root用户是否被识别

select user,host,plugin from user;

+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | %         | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | mysql_native_password |
+------------------+-----------+-----------------------+

解决方案 11:

如果上述用户的密码类型中有phpMyAdmin ,请选择本机 mysql 身份验证

它对我有用

在此处输入图片描述

解决方案 12:

我通过卸载以前的mysqlnpm uninstall mysql然后使用安装mysql2解决了该问题npm install mysql2。这对我来说非常有效。

解决方案 13:

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '********',
  database : 'vod_bill_database',
  port : 3308 
}); 

我遇到了同样的错误,因为我将 phpmyadmin 中的端口从 3306 更改为 3308,因此在这里我也必须写入端口:3308,然后它就开始工作了。

解决方案 14:

为了解决此错误,请使用以下代码:

var connectionString = 'mysql://*root:*password@*localhost/*database?charset=utf8_general_ci&timezone=-0700'; 
var connection= mysql.createConnection(connectionString); 

但请确保根据您的设置更改了 connectionString 中的 * 标记。

解决方案 15:

只需在 MySQL 上创建一个新用户

CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用