解决Node.js mysql客户端不支持认证协议引发的问题
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,前言mysql模块(项目地址为https://github.com/mysqljs/mysql)是一个开源的、JavaScript编写的MySQL驱动,可以在Node.js应用中来操作MySQL。但在
千家信息网最后更新 2025年11月13日解决Node.js mysql客户端不支持认证协议引发的问题
前言
mysql模块(项目地址为https://github.com/mysqljs/mysql)是一个开源的、JavaScript编写的MySQL驱动,可以在Node.js应用中来操作MySQL。但在使用过程中,出现了"ER_NOT_SUPPORTED_AUTH_MODE"问题。
本文介绍了出现该问题的原因及解决方案。
报错信息
当我试图使用mysql模块来连接MySQL 8时,出现了如下错误信息:
D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\index.js:17throw error;^Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL clientat Handshake.Sequence._packetToError (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)at Handshake.ErrorPacket (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18)at Protocol._parsePacket (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Protocol.js:291:23)at Parser._parsePacket (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Parser.js:433:10)at Parser.write (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Parser.js:43:10)at Protocol.write (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Protocol.js:38:16)at Socket.(D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\Connection.js:91:28)at Socket. (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\Connection.js:525:10)at Socket.emit (events.js:196:13)at addChunk (_stream_readable.js:290:12)--------------------at Protocol._enqueue (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Protocol.js:144:48)at Protocol.handshake (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Protocol.js:51:23)at Connection.connect (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\Connection.js:119:18)at Object. (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\index.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.jsThe result is: RowDataPacket { user_id: 1, username: '老卫' }其中,"RowDataPacket { user_id: 1, username: '老卫' }"就是数据库查询的结果。
源码
本节例子可以在https://github.com/waylau/nodejs-book-samples的"mysql-demo"应用中找到。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
方式
模块
加密
支持
信息
原因
应用
问题
密码
就是
方法
错误
例子
内容
前言
命令
地址
控制台
数据
数据库
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全法规建设
软件开发bug出错率考核
linux配置代理服务器
信息网络安全题目
sql数据库模拟器安卓
网络安全最简短绕口令
深圳钒钛壳互联网科技有限公司
互联网科技公司企业标语
印度软件开发对比中国
福建数据存储服务器
北京珍林网络技术公司
点击按钮修改数据库中文字
期货交易平台软件开发
幻塔服务器不同可以联机吗
汽车嵌入式软件开发质量管理
鹰潭个人服务器费用多少
jacs是哪个数据库
腾讯软件开发工程师面试题
网络安全监测装置的品牌
广西网络安全系统价钱
公安网络技术典型材料
网络技术发展政策
互联网科技圈人生导师
个人博客 云服务器
服务器可以用来干什么
菏泽网络安全和信息化
中小学网络技术与历史教学
毕升云互联网科技
摄像头设置不到服务器
主要的网络安全技术不包括