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

MySQL新建用户授权后仍报1044错误 无法访问数据库如何解决?

新建MySQL用户授全库权限仍无法访问目标库的问题处理

问题现象

创建新的MySQL用户后,通过本地Workbench发起连接操作,虽尝试了所有已知排查方法,仍然无法访问目标数据库db。
当前已将新用户密码调整为纯字母数字组合,解决了Workbench登录问题,但执行库切换操作时仍触发报错:

Error Code: 1044. Access denied for user 'newuser'@'localhost' to database 'db'

对照验证:使用root账号执行use db;可正常切换到目标库,无任何权限报错。

已完成的操作与校验结果

  • 查询MySQL系统库的用户列表,执行语句:
    SELECT user, host, plugin FROM mysql.user;
    查询返回的用户记录如下:
    # user  host    plugin
    root    localhost   mysql_native_password
    root    127.0.0.1   mysql_native_password
    root    ::1 mysql_native_password
    newuser localhost   mysql_native_password
    
  • 为新用户执行全库全表全权限授权,执行的语句:
    GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
    FLUSH PRIVILEGES;
    SHOW GRANTS FOR 'newuser'@'localhost';
    
    授权校验返回的结果为:
    GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost' IDENTIFIED BY PASSWORD '*...'

核心排查方向

  • 校验实际登录的匹配身份:使用newuser账号登录后执行SELECT CURRENT_USER();,核对系统实际识别的user@host信息。常见触发原因是mysql.user表中存在无权限的匿名用户(用户名字段为空的记录),这类记录的host同样配置为localhost时,会优先于具名用户匹配,导致用户看似登录成功,实际不具备任何操作权限。
  • 核对全局权限的实际写入状态:部分场景下GRANT语句执行无报错,但因为当前执行授权的账号没有足够的父级授权权限,实际权限值不会写入mysql.user表的对应权限字段。需要直接查询mysql.user表中newuser的各权限列值,确认是否真的开启了全部权限,避免仅依赖SHOW GRANTS的返回结果判断权限生效状态。
  • 排查host匹配偏差:MySQL对主机名的匹配遵循最具体字符串优先的规则,检查mysql.user表中是否存在同用户名但host不一致的其他记录,比如'newuser'@'%'、'newuser'@'127.0.0.1'这类条目。当Workbench通过TCP方式以127.0.0.1地址连接而非本地socket连接时,会优先匹配对应IP的host记录,如果这类记录没有配置权限,就会触发1044报错。
  • 核对授权语句的语法细节:检查授权语句中权限范围的写法,ON *.*的库名通配符和表名通配符之间不要加多余空格,部分MySQL版本对带空格的权限范围解析存在兼容问题,可能导致授权范围识别偏差,无法覆盖所有数据库的访问权限。
  • 校验库名匹配准确性:核对目标数据库的实际名称是否存在大小写差异、首尾空格、特殊字符,避免因为库名和权限绑定的名称不匹配,触发访问拒绝。

内容的提问来源于stack exchange,提问作者BWhite

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 10:15:03