栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

Node.js mmysql客户端不支持认证协议引发的“ER_NOT_SUPPORTED_AUTH_MODE”问题

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Node.js mmysql客户端不支持认证协议引发的“ER_NOT_SUPPORTED_AUTH_MODE”问题

mysql模块(项目地址为https://github.com/mysqljs/mysql)是一个开源的、Javascript编写的MySQL驱动,可以在Node.js应用中来操作MySQL。但在使用过程中,出现了“ER_NOT_SUPPORTED_AUTH_MODE”问题。

本文介绍了出现该问题的原因及解决方案。

报错信息

当我试图使用mysql模块来连接MySQL 8时,出现了如下错误信息:

D:workspaceGithubnodejs-book-samplessamplesmysql-demoindex.js:17
      throw error;
      ^

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
    at Handshake.Sequence._packetToError (D:workspaceGithubnodejs-book-samplessamplesmysql-demonode_modulesmysqllibprotocolsequencesSequence.js:47:14)
    at Handshake.ErrorPacket (D:workspaceGithubnodejs-book-samplessamplesmysql-demonode_modulesmysqllibprotocolsequencesHandshake.js:123:18)
    at Protocol._parsePacket (D:workspaceGithubnodejs-book-samplessamplesmysql-demonode_modulesmysqllibprotocolProtocol.js:291:23)
    at Parser._parsePacket (D:workspaceGithubnodejs-book-samplessamplesmysql-demonode_modulesmysqllibprotocolParser.js:433:10)
    at Parser.write (D:workspaceGithubnodejs-book-samplessamplesmysql-demonode_modulesmysqllibprotocolParser.js:43:10)
    at Protocol.write (D:workspaceGithubnodejs-book-samplessamplesmysql-demonode_modulesmysqllibprotocolProtocol.js:38:16)
    at Socket. (D:workspaceGithubnodejs-book-samplessamplesmysql-demonode_modulesmysqllibConnection.js:91:28)
    at Socket. (D:workspaceGithubnodejs-book-samplessamplesmysql-demonode_modulesmysqllibConnection.js:525:10)
    at Socket.emit (events.js:196:13)
    at addChunk (_stream_readable.js:290:12)
    --------------------
    at Protocol._enqueue (D:workspaceGithubnodejs-book-samplessamplesmysql-demonode_modulesmysqllibprotocolProtocol.js:144:48)
    at Protocol.handshake (D:workspaceGithubnodejs-book-samplessamplesmysql-demonode_modulesmysqllibprotocolProtocol.js:51:23)
    at Connection.connect (D:workspaceGithubnodejs-book-samplessamplesmysql-demonode_modulesmysqllibConnection.js:119:18)
    at Object. (D:workspaceGithubnodejs-book-samplessamplesmysql-demoindex.js:12:12)
    at Module._compile (internal/modules/cjs/loader.js:759:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
    at Module.load (internal/modules/cjs/loader.js:628:32)
    at Function.Module._load (internal/modules/cjs/loader.js:555:12)
    at Function.Module.runMain (internal/modules/cjs/loader.js:826:10)
    at internal/main/run_main_module.js:17:11
出错原因

导致这个错误的原因是,目前,最新的mysql模块并未完全支持MySQL 8的“caching_sha2_password”加密方式,而“caching_sha2_password”在MySQL 8中是默认的加密方式。因此,下面的方式命令是默认已经使用了“caching_sha2_password”加密方式,该账号、密码无法在mysql模块中使用。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.12 sec)
解决方法

解决方法是从新修改用户root的密码,并指定mysql模块能够支持的加密方式:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.12 sec)

上述语句,显示指定了使用“mysql_native_password”的加密方式。这种方式是在mysql模块能够支持。

再此运行应用,可以看到如下的控制台输出信息:

$ node index.js

The result is:  RowDataPacket { user_id: 1, username: '老卫' }

其中,“RowDataPacket { user_id: 1, username: ‘老卫’ }”就是数据库查询的结果。

源码

本节例子可以在https://github.com/waylau/nodejs-book-samples的“mysql-demo”应用中找到。

参考引用
  • 本文同步至: https://waylau.com/node.js-mysql-client-does-not-support-authentication-protocol/
  • 有关MySQL 8的“caching_sha2_password”加密方式,可见https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/244640.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号