在 MySQL 中,REVOKE 命令用于撤销已授予用户的权限。这个操作是 GRANT 的逆过程,常用于权限管理和安全控制。使用时需要具备相应的管理权限(如 GRANT OPTION 权限)。
基本语法格式
REVOKE 权限列表 ON 数据库对象 FROM '用户名'@'主机地址';说明:
权限列表:如 SELECT、INSERT、UPDATE、DELETE、ALL PRIVILEGES 等。 数据库对象:通常为 数据库名.表名,也可用 *.* 表示所有数据库的所有表。 '用户名'@'主机地址':必须与 GRANT 授予权限时使用的用户完全一致,包括主机部分。常见操作示例
以下是一些典型场景下的 REVOKE 使用方式:
REVOKE SELECT ON mydb.users FROM 'dev_user'@'localhost';
撤销用户 dev_user 在本地对 mydb 数据库中 users 表的查询权限。
REVOKE INSERT, UPDATE ON mydb.* FROM 'dev_user'@'localhost';
撤销该用户在 mydb 数据库下所有表的插入和修改权限。
REVOKE ALL PRIVILEGES ON testdb.* FROM 'temp_user'@'%';
撤销远程用户 temp_user 对 testdb 数据库所有对象的全部权限。
REVOKE GRANT OPTION ON . FROM 'admin_user'@'192.168.1.%';
仅撤销该用户在全局范围内的授权能力,不收回其他权限。
撤销后刷新权限
权限变更后,建议执行:
FLUSH PRIVILEGES;确保权限立即生效。虽然某些情况下 MySQL 会自动加载,但手动刷新更稳妥。
注意事项
REVOKE 不会删除用户账户本身,仅移除权限。 如果用户没有对应权限,执行 REVOKE 会报错,可先用 SHOW GRANTS FOR 'user'@'host'; 查看当前权限。 撤销的是具体授予的权限,不能撤销隐式权限或继承权限(MySQL 不支持角色继承)。 使用 % 通配符时要小心,避免误操作影响多个用户。基本上就这些,只要注意用户标识和权限范围匹配,REVOKE 操作就很清晰。
