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

6次阅读

MySQL 中回收用户权限用 REVOKE 语句,需严格匹配授权时的用户名 @host,语法为 REVOKE 权限 ON 库表 FROM 用户;回收后需 FLUSH PRIVILEGES 生效,且不删除账号、不撤销角色权限。

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

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 权限可能导致无法管理
  • 生产环境建议先在测试库验证语句,再操作线上
text=ZqhQzanResources