讲师中心 微信公众号
AI工具推荐 视频效率加速

MySQL 5.7如何解决授权表异常问题

小宇小哥_1334

小宇小哥_1334

发布时间:2026-08-30 09:58:59

|

470人浏览过

|

来源于php中文网

原创

GRANT后仍报ERROR 1142,主因是权限未真正生效:手动改表未FLUSH PRIVILEGES、账号host不匹配(如root@localhost≠root@127.0.0.1)、旧客户端不兼容caching_sha2_password插件,或全局与细粒度权限冲突导致隐式检查失败。

mysql 5.7如何解决授权表异常问题

MySQL 5.7 的授权表异常,八成不是权限配错了,而是 mysql.user 表结构或权限缓存没跟上——比如手动改过表、GRANT 后没 FLUSH PRIVILEGES、或者用了旧版客户端连新服务端导致插件不兼容。

为什么 GRANT 之后还是报 ERROR 1142 (42000)

这不是语句写错了,是权限没真正生效。MySQL 5.7 不像老版本那样“改完就立刻可用”,它把权限缓存在内存里,GRANT 通常会自动刷新,但以下情况不会:

  • 你用 UPDATE mysql.user 直接改了表,没执行 FLUSH PRIVILEGES
  • 你在 GRANT 后又手动更新了 mysql.user,覆盖了刚授的权限
  • 你连接的是 root@localhost,但 GRANT 给的是 root@127.0.0.1 ——这两个在 MySQL 里算不同用户
  • 你用的是 Docker 或远程部署,GRANT 在容器里执行了,但应用连的是宿主机 IP,而账号只授权给了 % 或 localhost

验证是否生效:登录后执行 SHOW GRANTS FOR CURRENT_USER(),别信 SELECT * FROM mysql.user 里的字段值,那只是原始数据,不反映当前加载状态。

skip-grant-tables 模式下改权限要注意什么

这是救急手段,但操作不当会让权限表彻底乱掉。5.7 起 Password 字段已废弃,必须用 authentication_string:

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 启动时加 skip-grant-tables 后,进库第一件事是 USE mysql;,否则 UPDATE 会失败
  • 改密码必须用:UPDATE mysql.user SET authentication_string = PASSWORD('newpass') WHERE User = 'root' AND Host = 'localhost';
  • 改完别忘了 FLUSH PRIVILEGES;,否则重启后仍无效
  • 如果之前执行过 ALTER USER,再用 UPDATE 直接改 authentication_string 可能导致插件不匹配(比如 caching_sha2_password 对应空字符串),登录时静默失败

权限冲突导致部分操作被拒(比如能 SELECT 却不能 DELETE)

MySQL 5.7 会按“全局 → 数据库 → 表 → 列”逐级检查权限,但有个坑:**全局权限和表级权限混用时,缺失的全局权限会覆盖更细粒度的授权**。例如:

  • 你给用户 GRANT DELETE, INSERT ON *.* TO 'u'@'%'(全局删/插)
  • 又单独给 GRANT SELECT, UPDATE ON db.t1 TO 'u'@'%'(仅对某张表查/改)
  • 这时执行 DELETE FROM db.t1 会报错:缺少 SELECT 权限

原因:DELETE 操作隐式需要先读取行(触发 SELECT 权限检查),而全局权限里没给 SELECT,MySQL 就不往下查表级授权了。解决办法只有两个:

  • 补全全局 SELECT:GRANT SELECT ON *.* TO 'u'@'%'
  • 或者干脆删掉全局授权,只留表级:REVOKE DELETE, INSERT ON *.* FROM 'u'@'%',再重新按需赋权

远程连接报 Access denied for user 'root'@'xxx' 怎么快速定位

别急着重置密码,先确认三件事:

  • 执行 SELECT User, Host FROM mysql.user WHERE User = 'root';,看返回结果里有没有匹配你连接地址的 Host 值(localhost ≠ 127.0.0.1 ≠ %)
  • 检查 MySQL 配置是否开了 skip-name-resolve:如果开了,DNS 解析被跳过,Host 必须写 IP 或 %,不能依赖域名或 localhost
  • 确认客户端驱动支持 caching_sha2_password:Python 3.7+、Java 8u251+、Navicat 12.1+ 才默认兼容;老版本连 5.7.22+ 会卡在认证阶段,日志里看不到错误,只显示连接超时

最易被忽略的是:Docker 容器内 MySQL 默认 bind-address 是 127.0.0.1,即使你映射了 3306 端口,外部也连不上——必须进容器改 my.cnf,设 bind-address = 0.0.0.0 并重启。

热门AI工具

更多
二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2033

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1259

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

735

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2712

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

4488

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1039

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

4751

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

4262

2023.08.14

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

0

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 178人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 282人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn