mysql 8.0引入了部分权限撤销功能,允许用户在已经授予用户全局权限的前提下,单独回收该用户在指定数据库或表上的对应权限,而无需回收全部全局权限。这个功能的核心开关就是partial_revokes系统变量,默认情况下该变量为OFF状态,需要手动启用才能使用部分权限撤销能力。

查看partial_revokes当前状态
在配置之前,我们可以先查看当前mysql实例中partial_revokes变量的状态,执行以下命令即可:
-- 查看partial_revokes系统变量的当前值 SHOW GLOBAL VARIABLES LIKE 'partial_revokes';
如果返回的结果中Value字段为OFF,说明当前未启用部分权限撤销功能,需要按照后续步骤进行配置。
启用partial_revokes系统变量
方式一:运行时动态启用
如果不需要重启mysql服务,可以通过全局变量设置命令直接启用,执行以下SQL语句:
-- 动态设置partial_revokes为ON,立即生效 SET GLOBAL partial_revokes = ON;
这种方式设置的变量在mysql服务重启后会恢复为默认值OFF,适合临时测试或者不想重启服务的场景。
方式二:配置文件永久启用
如果希望partial_revokes在mysql重启后依然保持启用状态,需要修改mysql的配置文件,在[mysqld]配置段下添加以下配置:
[mysqld] # 启用部分权限撤销功能 partial_revokes=ON
修改完成后重启mysql服务,配置即可永久生效。
部分权限撤销功能验证
启用partial_revokes之后,我们可以进行简单的测试验证功能是否可用。首先创建一个测试用户并授予全局SELECT权限:
-- 创建测试用户 CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'Test@123456'; -- 授予全局SELECT权限 GRANT SELECT ON *.* TO 'test_user'@'localhost';
此时test_user对所有数据库都有查询权限,如果我们想回收该用户在test_db数据库上的SELECT权限,就可以执行部分撤销操作:
-- 回收test_user在test_db库的SELECT权限 REVOKE SELECT ON test_db.* FROM 'test_user'@'localhost';
执行完成后,查询test_user的权限,会发现全局SELECT权限仍然存在,但是test_db库的SELECT权限已经被单独回收,说明部分权限撤销功能已经正常工作。
注意事项
- partial_revokes仅对全局权限的部分撤销生效,对于已经授予的库级或表级权限,无法直接通过该功能回收部分权限。
- 如果后续需要关闭partial_revokes,需要先确保所有用户不存在部分撤销的权限记录,否则关闭操作会失败。
- 部分撤销的权限记录会保存在mysql系统库的user表中,对应的权限字段会标记对应的库表限制。
mysql_8.0partial_revokes权限管理权限撤销修改时间:2026-06-23 09:27:15