开发者

MySQL彻底禁止用户执行KILL的解决方法

目录
  • 1. SHOW PROCESSLIST 不需要特殊权限
  • 2. KILL 命令的权限依赖
  • 3. 为什么 SELECT 权限的用户可以 KILL?
  • 如何彻底禁止用户执行&androidnbsp;KILL?
    • 方法 1:明确撤销 PROCESS 和 SUPER 权限
    • 方法 2:限制 SHOW PROCESSLIST(可选)
    • 方法 3:使用 mysql 8.0+ 的细粒度权限
  • 验证用户的权限
    • 总结

      在 MySQL 中,即使用户只有 SELECT 权限,仍然可以执行 SHOW PROCESSLIST 和 KILL 命令。原因如下:

      1. SHOW PROCESSLIST 不需要特殊权限

      • 默认情况下,任何用户都可以执行 SHOW PROCESSLIST,即使只有 USAGE 权限(最低权限)。
      • 但如果 MySQL 启用了 --skip-show-www.devze.comdatabase 启动选项,普通用户可能看不到不属于自己的进程。

      2. KILL 命令的权限依赖

      • KILL 命令的执行权限取决于 PROCESS 或 SUPER 权限
        • 如果用户有 PROCESS 权限,可以 KILL 自己的会话(即自己建立的连接)。
        • 如果用户有 SUPER 权限,可以 KILL 任意会话(包括其他用户的会话)。
      • 即使只授予 SELECT 权限,某些情况下用户仍然可以 KILL 自己的会话
        • 在 MySQL 5.7+,如果用户有 CONNECTION_ADMIN(或 SUPER 权限的替代),可能仍然可以 KILL 会话。
        • 在 MySQL 8.0+,引入了更细粒编程度的权限控制,但www.devze.com默认情况下,某些操作仍然可能允许 KILL

      3. 为什么 SELECT 权限的用户可以 KILL?

      • 可能的原因
        1. 用户隐式拥有 PROCESS 权限(检查 mysql.user 表确认)。
        2. MySQL 的版本差异(某些版本默认允许 KILL 自己的会话)。
        3. 用户属于某个角色(MySQL 8.0+),该角色可能授予了 PROCESS 或 KILL 权限。

      如何彻底禁止用户执行 KILL?

      方法 1:明确撤销 PROCESS 和 SUPER 权限

      REVOKE PROCESS, SUPER ON *.* FROM 'query'@'%';
      FLUSH PRIVILEGES;
      
      • 这样用户只能 SHOW PROCESSLIST,但无法 KILL 任何会话(包括自己的)。

      方法 2:限制 SHOW PROCESSLIST(可选)

      如果希望用户完全看不到进程列表:

      REVOKE PROCESS ON *.* FROM 'query'@'%';
      FLUSH PRIVILEGES;
      
      • 这样 SHOW PROCESSLIST 仅显示用户自己的会话(而不是所有会话)。

      方法 3:使用 MySQL 8.0+ 的细粒度权限

      在 MySQL 8.0+,可以更精确控制:

      -- 禁止 KILL 其他会话
      REVOKE SYSTEM_USER, SYSTEM_VARIABLES_ADMIN, SESSION_VARIABLES_ADMIN ON *.* FROM 'query'@'%';
      
      -- 确保没有 PROCESS 权限
      REVOKE PROCESS ON *.* FROM 'query'@'%';
      FLUSH PRIVILEGES;
      

      验证用户的权限

      -- 查看用户权限
      SHOW GRANTS FOR 'query'@'%';
      
      -- 检查 PROCESS 权限
      SELECT * FROM mysql.user WHERE user='query'\G
      
      • 如果 Process_priv = 'Y',说明用户有 PROCESS 权限,可以 KILL 自己的会话。

      总结

      • SELECT 权限本身不会允许 KILL,但 PROCESS 权限会
      • 要禁止 KILL,必须明确撤销 PROCESS 和 SUPER 权限
      • MySQL 8.0+ 提供了更细粒度的权限控制,可以更严格限制 KILL 操作。

      如果你的 query 用户仍然可以 KILL,请检查其完整权限(可能有隐藏的 PROCESS 或角色权限)。

      以上就是MySQL彻底禁止用户执行KILL的解决方法的详细内容,更多关于MySQL禁止用户执行KILL的资料请关注编程客栈(www.devze.com)编程其它相关文章!

      0

      上一篇:

      下一篇:没有了

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新数据库

      数据库排行榜