如何创建仅拥有SHOW PROCESSLIST权限可查看所有MySQL进程的非root用户
MySQL专用进程查看用户实现方案
方案1:基于PROCESS全局权限配置(最简单)
该方案配置成本最低,权限完全满足需求:
- 使用root账号登录MySQL实例,执行以下命令创建用户,可根据实际访问来源调整
localhost为指定IP段,密码替换为自定义的强密码:
CREATE USER 'process_viewer'@'localhost' IDENTIFIED BY '你设置的安全密码';
- 授予全局PROCESS权限,该权限仅允许用户查看所有会话的进程列表,无其他数据访问权限:
GRANT PROCESS ON *.* TO 'process_viewer'@'localhost'; FLUSH PRIVILEGES;
- 验证效果:
- 用新用户登录:
mysql -u process_viewer -p - 执行
SHOW PROCESSLIST;可查看所有用户的进程,符合需求 - 尝试查询任意业务表、系统表都会返回权限不足提示
- 用新用户登录:
方案2:基于存储过程的更严格权限控制
如果你需要完全禁止PROCESS权限附带的SHOW ENGINE等其他操作,可以用存储过程做细粒度控制:
- root账号下创建指定存储过程,使用定义者权限执行:
DELIMITER // CREATE PROCEDURE sp_show_all_processlist() SQL SECURITY DEFINER BEGIN SHOW FULL PROCESSLIST; END // DELIMITER ;
- 创建用户后仅授予该存储过程的执行权限,不需要授予PROCESS权限:
CREATE USER 'process_viewer'@'localhost' IDENTIFIED BY '你设置的安全密码'; GRANT EXECUTE ON PROCEDURE 你的库名.sp_show_all_processlist TO 'process_viewer'@'localhost'; FLUSH PRIVILEGES;
- 该用户登录后仅可通过执行
CALL sp_show_all_processlist();查看进程列表,其他所有操作均无权限,权限控制精度更高。
注意:以上方案兼容MySQL 5.7、8.0以及MariaDB所有主流版本。
内容的提问来源于stack exchange,提问作者Biqarar
相关产品推荐
相关产品推荐

