如何在mysql中回收用户权限_mysql权限回收操作方法

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

在 MySQL 中回收用户权限,主要通过 REVOKE 语句实现,配合 FLUSH PRIVILEGES 确保变更立即生效。操作前需具备

GRANT OPTION
权限或更高权限(如 root),且必须明确指定要撤销的权限类型、作用范围及目标用户。

明确要回收的权限和作用范围

MySQL 权限分层级:全局(

*.*
)、数据库级(
db_name.*
)、表级(
db_name.table_name
)等。回收时必须与当初授权时的层级和对象完全匹配,否则可能失败或无效。

比如用户曾用
GRANT SELECT ON test.users TO 'u1'@'localhost';
授予表级权限,回收时就得写:
REVOKE SELECT ON test.users FROM 'u1'@'localhost';
若原授权是数据库级:
GRANT INSERT, UPDATE ON app_db.* TO 'u1'@'%';
,则回收应为:
REVOKE INSERT, UPDATE ON app_db.* FROM 'u1'@'%';
不能用
REVOKE ALL ON *.*
直接清空所有权限——MySQL 不支持模糊撤销,必须逐项或使用
REVOKE ALL PRIVILEGES, GRANT OPTION
组合。

执行 REVOKE 并刷新权限缓存

REVOKE 命令本身只修改权限元数据,不自动刷新内存中的权限列表。用户下次连接时才会加载新配置,但已存在的连接仍保留旧权限。如需立即生效,必须手动刷新:

执行:
REVOKE SELECT, INSERT ON sales.* FROM 'reporter'@'192.168.1.%';
紧接着运行:
FLUSH PRIVILEGES;
注意:只有对 mysql 系统库有写权限的用户才能执行 FLUSH PRIVILEGES;普通用户无法触发该操作。

检查回收结果是否生效

回收后建议验证,避免遗漏或误操作:

查看用户当前权限:
SHOW GRANTS FOR 'u1'@'localhost';
检查 mysql.db、mysql.tables_priv 等系统表(仅限有权限用户):
SELECT * FROM mysql.db WHERE User='u1' AND Host='localhost' AND Db='test';
实际用该用户登录,尝试执行被回收的操作(如 SELECT),确认返回
ERROR 1142 (42000): SELECT command denied
类提示。

特殊情况处理:回收所有权限并限制登录

若需彻底停用某用户,可组合操作:

先回收全部权限:
REVOKE ALL PRIVILEGES, GRANT OPTION ON *.* FROM 'olduser'@'%';
再删除用户(MySQL 5.7+ 支持):
DROP USER 'olduser'@'%';
(自动清除权限,无需 FLUSH)
若版本较老(如 5.6),需分步:
DROP USER
不可用,改用
DELETE FROM mysql.user WHERE User='olduser' AND Host='%';
,之后必须
FLUSH PRIVILEGES;

相关推荐