Node.js操作MySQL 8 INSERT时触发ER_ACCESS_DENIED_ERROR(errno:1045)求助
解决方案:MySQL 8 INSERT操作权限拒绝问题
1. 排查连接配置的密码问题
错误提示using password: NO直接说明执行INSERT时应用未传递密码,或密码配置失效:
- 打开
keys.js,确认数据库配置里的password字段是否填写了正确的root用户密码(Homebrew安装的MySQL 8,密码是你安装时设置或通过mysql_secure_installation配置的) - 检查
database.js是否正确读取keys.js的密码,比如有没有拼写错误(例:把password写成pwd) - 确认连接配置的
user为root、host为localhost,和错误提示里的用户/主机完全匹配
2. 验证MySQL用户权限与认证插件
MySQL 8默认用caching_sha2_password认证插件,部分旧驱动可能不兼容,同时要确保root用户权限足够:
- 登录MySQL终端:执行
mysql -u root -p,输入密码进入 - 查看用户信息:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root'; SHOW GRANTS FOR 'root'@'localhost'; - 若插件是
caching_sha2_password且驱动不兼容,可临时切换为兼容插件:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的root密码'; FLUSH PRIVILEGES; - 确保root用户有目标数据库的INSERT权限,无权限则授权:
GRANT INSERT ON 你的数据库名.* TO 'root'@'localhost'; FLUSH PRIVILEGES;
3. 检查POST路由的连接逻辑
确认POST请求执行INSERT时,使用的是和初始化连接一致的配置:
- 查看路由代码是否重新创建了数据库连接,且新连接遗漏了密码参数
- 若用连接池,检查池配置是否和初始化时一致,没有漏掉密码
- 避免代码中硬编码错误的用户/密码,确保读取的是
keys.js中的正确配置
4. 重置root密码(若密码混乱或遗忘)
如果不确定root密码正确性,可重置:
- 停止MySQL服务:
brew services stop mysql - 跳过权限验证启动:
mysqld_safe --skip-grant-tables & - 无密码登录:
mysql -u root - 重置密码并更新插件:
USE mysql; UPDATE user SET authentication_string = PASSWORD('新密码'), plugin = 'mysql_native_password' WHERE user = 'root' AND host = 'localhost'; FLUSH PRIVILEGES; EXIT; - 重启服务:
brew services restart mysql
内容的提问来源于stack exchange,提问作者Manuel Bartolome Brandes
相关产品推荐
相关产品推荐

