如何回收用户权限_mysql revoke用法

来源:这里教程网 时间:2026-02-28 20:39:29 作者:

MySQL 中回收用户权限用 REVOKE 语句,核心是明确“谁、在哪个库表、撤回什么权限”。它和 GRANT 对应,但不能撤销不存在的权限,也不能跨主机撤销(需指定完全匹配的用户名@host)。

基本语法与常用形式

REVOKE 后跟权限类型,ON 指定作用范围,FROM 指定用户:

回收单个权限
REVOKE SELECT ON mydb.users FROM 'alice'@'localhost';
回收多个权限
REVOKE INSERT, UPDATE ON mydb.orders FROM 'bob'@'%';
回收所有权限(除 GRANT OPTION)
REVOKE ALL PRIVILEGES ON mydb.* FROM '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 值
不确定 host 时,可查
mysql.user
表:
SELECT User, Host FROM mysql.user WHERE User = 'xxx';
若原授权是
'user'@'localhost'
,而你执行
REVOKE ... FROM 'user'@'%'
,权限不会被移除

回收后需刷新权限才生效

REVOKE 执行成功只是修改了权限元数据,客户端连接不会自动感知变化。已有连接仍保留旧权限,新连接才会应用新规。

执行
FLUSH PRIVILEGES;
强制重载权限表(推荐,尤其在直接改 mysql.user 表后)
或者重启 MySQL 服务(不必要,仅极端情况) 注意:普通 REVOKE 后一般不需要 FLUSH,系统会自动同步;但某些版本或特殊配置下建议显式执行一次更稳妥

常见误区与安全提醒

REVOKE 不会删除用户账号,只清权限。想彻底清理,要搭配 DROP USER。

不能用 REVOKE 回收“通过角色获得的权限”,得先从角色中撤权,或从用户撤消角色 回收
ALL PRIVILEGES
不包含
GRANT OPTION
,要单独 revoke
mysql
系统库操作需谨慎,误 revoke root 权限可能导致无法管理
生产环境建议先在测试库验证语句,再操作线上

相关推荐