

新闻资讯
行业动态MySQL中回收用户权限需用REVOKE语句精确匹配原授权层级与对象,再执行FLUSH PRIVILEGES立即生效;须具备GRANT OPTION或更高权限,回收后应通过SHOW GRANTS或实际操作验证。
在 MySQL 中回收用户权限,主要通过 REVOKE 语句实现,配合 FL
USH 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 SELECT, INSERT ON sales.* FROM 'reporter'@'192.168.1.%';
FLUSH PRIVILEGES;
回收后建议验证,避免遗漏或误操作:
SHOW GRANTS FOR 'u1'@'localhost';
SELECT * FROM mysql.db WHERE User='u1' AND Host='localhost' AND Db='test';
ERROR 1142 (42000): SELECT command denied 类提示。若需彻底停用某用户,可组合操作:
REVOKE ALL PRIVILEGES, GRANT OPTION ON *.* FROM 'olduser'@'%';
DROP USER 'olduser'@'%';(自动清除权限,无需 FLUSH)DROP USER 不可用,改用 DELETE FROM mysql.user WHERE User='olduser' AND Host='%';,之后必须 FLUSH PRIVILEGES;