概述
在 MySQL 的用户权限管理体系中,REVOKE 语句是用于撤销已授予用户的特定权限的核心命令。正确使用 REVOKE 不仅关乎功能实现,更直接影响数据库的安全性与合规性。本文将围绕 REVOKE 的语法规范、权限作用域、常见误区及安全最佳实践展开深入解析。
一、REVOKE 基础语法结构
MySQL 中撤销权限的标准语法如下:
REVOKE privilege_type [(column_list)] ON database_name.table_name FROM 'user'@'host';
其中关键组成部分包括:
privilege_type:权限类型,如SELECT、INSERT、UPDATE、ALL PRIVILEGES等。ON database.table:指定权限作用的对象范围。FROM 'user'@'host':明确指定被撤销权限的用户标识,格式必须为'用户名'@'主机名'。
注意:
'user'@'host'是一个整体标识符,不能加额外引号或空格。例如'admin1'@'localhost'是合法写法;而"'admin1'@'localhost'"或'admin1 @ localhost'均为错误。
二、权限作用域:*.* vs database.* vs database.table
MySQL 权限的作用范围由 ON 子句中的对象路径决定,不同写法对应不同层级的权限控制:
| 写法 | 含义 | 示例场景 |
|---|---|---|
*.* | 所有数据库的所有表(全局权限) | 撤销用户对整个实例的 INSERT 权限 |
db_name.* | 指定数据库下的所有表 | 限制用户仅能操作某业务库 |
db_name.tbl | 指定数据库中的具体表 | 精细化控制敏感表访问 |
关键区别示例:
REVOKE INSERT ON * FROM 'u'@'h';❌ 错误!
*单独使用不合法,MySQL 要求明确指定数据库。表格式。REVOKE INSERT ON mydb.* FROM 'u'@'h';✅ 正确,仅撤销mydb库的插入权限。REVOKE INSERT ON *.* FROM 'u'@'h';✅ 正确,撤销全局插入权限。
提示:若要撤销全局权限(如
GRANT OPTION、SUPER等),必须使用 。


