mysql如何撤销所有数据库访问权限_利用REVOKE ALL实现彻底清除

星墨同学_7783

星墨同学_7783

2026-04-10

811人浏览

原创

不能。REVOKE ALL仅撤销显式授予的权限,不撤销默认USAGE权限及角色继承权限,且不递归生效于新建对象,需FLUSH PRIVILEGES刷新并用新连接验证。

mysql如何撤销所有数据库访问权限_利用revoke all实现彻底清除

REVOKE ALL 能否真正撤销所有权限

不能。MySQL 的 REVOKE ALL 只撤销当前显式授予的权限,不触碰系统默认权限(比如 USAGE),也不影响通过角色继承来的权限。它更像“撤回你亲手给的”,而不是“清零”。如果你看到用户还能连上、还能执行 SELECT DATABASE() 或者查 information_schema,那大概率就是 USAGE 还在——这是 MySQL 默认赋予每个账号的基础连接权。

实操建议:

  • 先用 SHOW GRANTS FOR 'user'@'host'; 看清当前到底有哪些权限,别猜
  • REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'host'; 是标准写法,缺一不可;漏掉 GRANT OPTION,下次别人再给你授予权限时可能绕过控制
  • 如果用户是通过角色获得权限(MySQL 8.0+),必须单独对角色执行 REVOKE,或直接 DROP ROLE

撤销后用户仍能登录?检查 USAGE 权限

是的,USAGE 是一个“空权限”:不赋予任何操作能力,但允许建立连接。MySQL 创建用户时(比如用 CREATE USER)会自动附带 USAGE,而 REVOKE ALL 不动它。所以撤销完权限,用户依然能 mysql -u user -p 登录,只是进库后执行任何 DML/DCL 都报 ERROR 1142 (42000)。

实操建议:

  • 要彻底禁止访问,得显式收回连接权:REVOKE USAGE ON *.* FROM 'user'@'host';
  • 但注意:MySQL 不允许只留 USAGE 之外的权限而不留 USAGE;反过来,删掉 USAGE 后,该账号将完全无法认证登录
  • 生产环境慎用直接删 USAGE,建议优先用 DROP USER 彻底移除账号

REVOKE ALL 对数据库/表级权限是否递归生效

不递归。MySQL 的权限是分层的,REVOKE ALL ON db.* 只影响该数据库下当前存在的表,不会自动覆盖后续新建的表;同理,REVOKE ALL ON *.* 不影响已授予的具体表(如 db.tbl)或列级权限。

MySQL
MySQL

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

下载

实操建议:

  • 若需确保某用户对整个实例“无感”,必须逐层清理:REVOKE ALL ON *.* + REVOKE ALL ON db1.* + REVOKE ALL ON db1.tbl1(如有)
  • MySQL 8.0.16+ 支持 REVOKE ALL ON ALL SCHEMAS.*,但仅限 schema 级,仍不覆盖表/列/例程
  • 权限变更不实时生效:需执行 FLUSH PRIVILEGES;,否则旧连接可能缓存权限状态

撤销权限后应用报错 ERROR 1045 或 ERROR 1142 怎么快速定位

ERROR 1045 (28000) 是认证失败(用户名/密码/主机不匹配),和权限无关;真权限问题几乎全是 ERROR 1142 (42000),比如 SELECT command denied to user。但很多人混淆这两者,浪费排查时间。

实操建议:

  • 先确认错误码:ERROR 1142 才是权限不足;ERROR 1045 要查 mysql.user 表里 Host 和连接来源是否一致
  • 用 SELECT * FROM mysql.tables_priv WHERE User='user' AND Host='host'; 直接查权限存储表,比 SHOW GRANTS 更底层、更准
  • 注意大小写:MySQL 权限表中 User 和 Host 匹配严格区分大小写(尤其在 Linux 上)

最常被忽略的一点:权限撤销后,已存在的长连接不会立即失效,直到它下一次执行语句时才校验——所以测试务必用新连接,别在旧 shell 里反复重试。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

4523

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

951

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1189

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

6501

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

3263

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

6460

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

8861

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1210

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1052

5

热门下载

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

精品课程

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

共1课时 | 191人学习