mysql如何撤销用户权限_mysql权限回收操作指南

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

在 MySQL 中撤销用户权限,核心是使用 REVOKE 语句。它不是删除用户,而是精准移除已授予的访问能力,比如禁止某人读某库、写某表,或收回管理权。操作前需确保你拥有

GRANT OPTION
权限,且用户名@主机名必须与当初
GRANT
时完全一致。

明确要撤销的权限范围

权限作用域分四层:全局(

*.*
)、数据库级(
db_name.*
)、表级(
db_name.table_name
)、列级(需显式指定列)。撤销时必须匹配原授权粒度。

想停掉用户对整个
sales
库的操作?用
REVOKE ALL PRIVILEGES ON sales.* FROM 'user1'@'192.168.1.%';
只禁读,保留写?写
REVOKE SELECT ON app.users FROM 'api_user'@'localhost';
回收创建数据库的全局权限?写
REVOKE CREATE ON *.* FROM 'dev'@'%';

注意 GRANT OPTION 要单独处理

ALL PRIVILEGES
不包含
GRANT OPTION
,这是独立权限。如果用户曾被允许转授权限,必须额外撤销:

REVOKE GRANT OPTION ON *.* FROM 'manager'@'localhost';
若要一次性清空所有权限(含转授权),应写成:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'manager'@'localhost';

执行后务必验证并刷新

撤销命令执行成功不代表立即生效——尤其在高并发或权限缓存较深的环境中。

先运行
FLUSH PRIVILEGES;
强制重载权限表
再用
SHOW GRANTS FOR 'user1'@'localhost';
确认结果。输出里不应再出现刚撤销的权限项
若提示“Unknown user”,说明用户名@主机名拼写有误;若报“Access denied”,是你当前登录账户缺乏
GRANT OPTION

安全操作建议

生产环境执行前建议做三件事:

SELECT User, Host, Select_priv, Insert_priv, ... FROM mysql.user WHERE User = 'xxx';
快速查该用户当前全局权限状态
在测试库上先复现相同授权结构,验证 REVOKE 语句语法无误 避免使用
REVOKE ... FROM 'user'@'%'
这类宽泛主机名,除非确认该用户仅此一条记录;否则可能误撤其他同名但不同主机的账号权限

相关推荐