ER_NOT_SUPPORTED_AUTH_MODE - MySQL服务器

时间:2017-07-06 10:23:04

标签: mysql node.js

我已经设置了一个MySQL数据库。当我尝试通过我的Node JS服务器访问它时,我收到错误

  

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

这很奇怪,因为我已经卸载了MariaDB并使用Homebrew安装了MySQL。

这是我的连接尝试:

var mysql = require('mysql');

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

有什么想法吗?感谢

13 个答案:

答案 0 :(得分:36)

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

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

答案 1 :(得分:8)

enter image description here

执行“重新配置身份验证方法”,为5.1选择旧式密码支持

错误原因

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

答案 2 :(得分:6)

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

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

首先,您需要NPM,NodeJS,MySql和NPM的MySql驱动程序。如果您还没有它们,那么您甚至都不应该读这本书,因为您甚至无法100%知道您要解决的问题是这个...

...如果您确实列出了所有内容,并且正在运行Ubuntu发行版,并且正在收到类似于以下内容的错误验证消息和Connection err消息,则为

  • 错误:(28000):用户'ajc'@'localhost'的访问被拒绝
  • 错误: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.');
  });


现在打开一个终端窗口,并进行典型的更新和升级,这一点很重要,这就是每个Tut都要求您这样做的原因。

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

让连接= mysql.createConnection({ 主机:'localhost', 用户:“ root”, 密码:'********', 数据库:“ DB_App_00”, });

现在键入以下cmd

~$: sudo mysql -u root

  • 它会提示您输入Ubuntu密码,然后键入并按[ENTER]。

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

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

mysql> FLUSH PRIVILEGES;

  • 下一部分很明显,将“ ChoosePassword”更改为您将记住的密码,同时将密码放在单引号内。完全没有其他更改,请按[ENTER]

  • 如果正确执行了这些步骤,则您现在拥有一个拥有自己密码的MySQL 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 testsql.js

如果没有显示已连接,则说明您做错了什么,但如果一切顺利,则应连接。我花了点力气才开始工作,但是这个答案应该为您节省阅读其他所有书面答案的时间。

答案 3 :(得分:5)

您可以更改您正在使用的包 使用 mysql2 代替 mysql 我有同样的问题,mysql2 为我工作

npm 和 mysql2

答案 4 :(得分:4)

我认为在某些MySQL版本中,他们对建立连接的认证有点混乱。我所要做的就是添加一行" insecureAuth:true"我的连接尝试。

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

现在工作正常。

答案 5 :(得分:4)

您可以更改现有用户以使用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

建议对此程序包使用池连接。

答案 6 :(得分:2)

第一次运行此代码->

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

第二个

flush privileges;

答案 7 :(得分:0)

尝试使用旧版本的mysql,如5.6.40 ,它默认使用SHA256_password auth,其中新版本为8.0。默认使用sha2_password auth,它更安全,并抛出 身份验证协议错误 MYSQL installer 5.6.40

答案 8 :(得分:0)

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

我有同样的错误,因为我将phpmyadmin中的端口从3306更改为3308,因此我也必须编写端口:3308并开始工作。

答案 9 :(得分:0)

感谢@Vinayak Shedgeri 我通过使用“ MySQL Installer”重新配置“ MySQL Server”步骤解决了该错误。 steps with the "MySQL Installer

答案 10 :(得分:0)

为了克服此错误,请使用以下代码:

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

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

答案 11 :(得分:0)

黄色的兄弟!

// 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:

答案 12 :(得分:0)

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

CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';