MySQL中回收用户权限用REVOKE语句,需严格匹配授权时的用户名@host,语法为REVOKE权限ON库表FROM用户;回收后需FLUSH PRIVILEGES生效,且不删除账号、不撤销角色权限。
MySQL 中回收用户权限用 REVOKE 语句,核心是明确“谁、在哪个库表、撤回什么权限”。它和 GRANT 对应,但不能撤销不存在的权限,也不能跨主机撤销(需指定完全匹配的用户名@host)。
REVOKE 后跟权限类型,ON 指定作用范围,FROM 指定用户:
REVOKE SELECT ON mydb.users FROM 'alice'@'localhost';
REVOKE INSERT, UPDATE ON mydb.orders FROM 'bob'@'%';
REVOKE ALL PRIVILEGES ON mydb.* FRO
M 'dev'@'192.168.1.%';
REVOKE GRANT OPTION ON *.* FROM 'admin'@'localhost';
GRANT 时用了 'user'@'10.%.%.%',REVOKE 就不能写成 'user'@'%',否则报错 “Unknown table”。MySQL 把不同 host 视为不同用户。
SHOW GRANTS FOR 'user'@'host'; 确认实际授予的 host 值mysql.user 表:SELECT User, Host FROM mysql.user WHERE User = 'xxx';
'user'@'localhost',而你执行 REVOKE ... FROM 'user'@'%',权限不会被移除REVOKE 执行成功只是修改了权限元数据,客户端连接不会自动感知变化。已有连接仍保留旧权限,新连接才会应用新规。
FLUSH PRIVILEGES; 强制重载权限表(推荐,尤其在直接改 mysql.user 表后)REVOKE 不会删除用户账号,只清权限。想彻底清理,要搭配 DROP USER。
ALL PRIVILEGES 不包含 GRANT OPTION,要单独 revokemysql 系统库操作需谨慎,误 revoke root 权限可能导致无法管理