ER_NOT_SUPPORTED_AUTH_MODE-MySQL 服务器

2024-10-25 08:42:00
admin
原创
53
摘要:问题描述:连接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';
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用