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
相关产品推荐
相关产品推荐

