You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 11:27:28