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

怎样在MySQL中收回用户的DROP和TRUNCATE高危权限

风婷同学_4111

风婷同学_4111

发布时间:2026-10-26 10:59:02

|

412人浏览过

|

来源于php中文网

原创

MySQL中REVOKE DROP和TRUNCATE权限必须严格匹配原始GRANT的ON子句(含库名、表名、反引号、host大小写等),否则静默失效;TRUNCATE本质等价于DROP+CREATE,需同步撤销;旧连接不生效,须重连验证。

怎样在mysql中收回用户的drop和truncate高危权限

REVOKE DROP和TRUNCATE必须显式写出ON子句,否则静默失效

MySQL不会自动推断权限范围,REVOKE语句的ON部分必须与当初GRANT时完全一致:库名、表名、反引号、host地址大小写都不能差。哪怕只多一个空格或少一对反引号,执行REVOKE后提示Query OK,实际权限仍在。

常见错误包括:

  • REVOKE DROP ON mydb.users FROM 'u'@'%' 失败,因为当初是用 GRANT DROP ON `my-db`.`users` 授的权 → 必须带反引号:REVOKE DROP ON `my-db`.`users` FROM 'u'@'%'
  • REVOKE TRUNCATE ON *.* FROM 'u'@'%' 报错 → TRUNCATE权限不支持全局作用域,只能写成 REVOKE TRUNCATE ON mydb.* FROM 'u'@'%' 或具体表
  • 用户有多个host记录(如'u'@'localhost'和'u'@'%'),只对其中一个REVOKE,另一个仍保留权限

验证是否真正撤掉:先运行SHOW GRANTS FOR 'u'@'%',确认输出里已无对应DROP或TRUNCATE行;再用新连接测试DROP TABLE mydb.t或TRUNCATE TABLE mydb.t是否报ERROR 1142。

TRUNCATE权限本质是DROP+CREATE,不能“只给清空不给删表”

MySQL没有独立的TRUNCATE权限。当你执行GRANT TRUNCATE ON db.t TO 'u'@'%',底层等价于授予DROP和CREATE——用户不仅能清空数据,还能直接DROP TABLE、重建同名表、绕过外键或触发器。

所以收回TRUNCATE不是可选项,而是必须项:

MySQL
MySQL

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

下载
  • 若当初授过TRUNCATE,必须同步REVOKE DROP, CREATE ON db.t FROM 'u'@'%'
  • 若用户有ALL PRIVILEGES ON db.*,先REVOKE ALL PRIVILEGES ON db.* FROM 'u'@'%',再重授安全权限(如SELECT, INSERT, UPDATE)
  • MySQL 8.0+中TRUNCATE需显式授权,但旧版本依赖DROP权限,因此跨版本环境更要统一检查DROP是否残留

仅撤DROP不够防误删,DELETE和ALTER也得一并控制

用户没DROP权限,仍可能通过其他路径破坏数据:

  • DELETE FROM users(无WHERE)能全表清空,且比TRUNCATE更隐蔽(走binlog、触发器生效)→ 必须REVOKE DELETE ON db.users FROM 'u'@'%'
  • ALTER TABLE users RENAME TO users_bak + CREATE TABLE users可间接实现“删表重建” → 需REVOKE ALTER, CREATE ON db.users FROM 'u'@'%'
  • 持有SUPER或SYSTEM_VARIABLES_ADMIN权限的用户可关sql_log_bin绕过所有DDL限制 → 必须查SHOW GRANTS,发现即REVOKE SUPER ON *.* FROM 'u'@'%'

生产环境建议默认关闭DELETE的无条件使用:在会话级启用sql_safe_updates=ON,强制DELETE必须带WHERE或LIMIT。

权限变更后旧连接不生效,必须刷新或重启连接池

REVOKE只更新mysql系统表,已建立的连接(包括应用连接池里的长连接)仍用旧权限快照。你看到SHOW GRANTS已变,但应用代码仍能成功DROP,大概率是这个原因。

解决办法只有两个:

  • 让应用主动断开重连(如滚动重启服务、清空连接池)
  • 等连接超时自动驱逐(风险高,不推荐)

没有FLUSH PRIVILEGES能立即刷新已有连接的权限缓存——这是MySQL权限模型的硬性限制,也是最容易被忽略的一环。

热门AI工具

更多
咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

WorkBuddy

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

DeepSeek

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

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

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

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

相关专题

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

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

2353

2023.06.20

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

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

1419

2023.06.21

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

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

835

2023.07.18

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

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

3292

2023.07.19

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

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

5628

2023.07.25

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

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

1219

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

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

5891

2023.08.11

mysql忘记密码
mysql忘记密码

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

5122

2023.08.14

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

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

精品课程

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

共1课时 | 191人学习

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

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