`REVOKE` 语句用于收回之前授予用户的权限,是权限管理中的重要安全措施。
基本语法格式
1. 收回特定权限
REVOKE privilege_type [(column_list)] ON privilege_level FROM user [, user] ...
2. 收回所有权限
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
参数说明
参数 | 说明 | 示例 |
---|---|---|
privilege_type | 要收回的权限类型 | SELECT , INSERT , UPDATE , DELETE , ALL PRIVILEGES |
column_list | 要收回权限的列名(仅用于列级权限) | (name, email) |
privilege_level | 权限作用范围 | *.* , mydb.* , mydb.users |
user | 用户名和主机名 | 'testUser'@'localhost' |
实用示例
示例 1:收回特定权限
收回用户的插入权限(所有数据库)
REVOKE INSERT ON *.* FROM 'testUser'@'localhost';
收回用户的删除权限(特定数据库)
REVOKE DELETE ON mydb.* FROM 'app_user'@'%';
收回用户的更新权限(特定表)
REVOKE UPDATE ON mydb.users FROM 'admin'@'localhost';
示例 2:收回多个权限
同时收回多个权限
REVOKE SELECT, INSERT, UPDATE ON mydb.* FROM 'report_user'@'192.168.1.%';
示例 3:收回列级权限
收回对特定列的更新权限
REVOKE UPDATE (salary, bonus) ON mydb.employees FROM 'hr_user'@'localhost';
示例 4:收回所有权限
收回用户的所有权限(但用户仍然存在)
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'testUser'@'localhost';
示例 5:收回 GRANT 权限
只收回用户授予他人权限的能力
REVOKE GRANT OPTION ON *.* FROM 'testUser'@'localhost';
权限验证
执行 `REVOKE` 后,使用 `SHOW GRANTS` 验证权限变更:
查看用户当前权限
SHOW GRANTS FOR 'testUser'@'localhost';
输出示例:
Grants for testUser@localhost
GRANT SELECT ON *.* TO 'testUser'@'localhost'
注意事项和最佳实践
1. 权限要求:执行 `REVOKE` 需要:
`CREATE USER` 权限 或
`UPDATE` 权限 on `mysql` 数据库
2. 级联回收:如果用户有 `GRANT OPTION` 权限,收回其权限时不会自动收回其已授予他人的权限
3. 权限层级:需要精确匹配权限级别:
如果权限是授予 mydb.*,必须在此级别收回
REVOKE SELECT ON mydb.* FROM 'user'@'%';
而不是
REVOKE SELECT ON *.* FROM 'user'@'%';
4. 用户仍然存在:`REVOKE` 只移除权限,不删除用户。要完全删除用户:
DROP USER 'testUser'@'localhost';
5. 立即生效:权限收回立即生效,无需重启服务
常见使用场景
场景 1:安全审计后收紧权限
发现用户权限过多,收紧到最小必要权限
REVOKE ALL PRIVILEGES ON *.* FROM 'user'@'%';
GRANT SELECT, INSERT ON specific_db.* TO 'user'@'%';
场景 2:临时权限回收
临时禁用用户写权限
REVOKE INSERT, UPDATE, DELETE ON production.* FROM 'app_user'@'%';
维护完成后恢复
GRANT INSERT, UPDATE, DELETE ON production.* TO 'app_user'@'%';
场景 3:权限修正
错误授予了过多权限,进行修正
REVOKE DROP, ALTER ON *.* FROM 'junior_dba'@'localhost';
GRANT SELECT, INSERT, UPDATE ON dev_db.* TO 'junior_dba'@'localhost';
错误处理
如果遇到错误,检查以下问题:
1. 权限不存在:尝试收回未授予的权限
2. 用户不存在:指定的用户不存在
3. 权限不足:当前用户没有执行 `REVOKE` 的权限
4. 语法错误:权限级别或用户名格式错误
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程