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

在 MySQL 中,即使用户只有 SELECT 权限,仍然可以执行 SHOW PROCESSLIST 和 KILL 命令,那么如何彻底禁止用户执行 KILL?本文给大家详细介绍了MySQL彻底禁止用户执行KILL的解决方法,需要的朋友可以参考下

目录
  • 1. SHOW PROCESSLIST 不需要特殊权限
  • 2. KILL 命令的权限依赖
  • 3. 为什么 SELECT 权限的用户可以 KILL?
  • 如何彻底禁止用户执行 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-database 启动选项,普通用户可能看不到不属于自己的进程。

      2. KILL 命令的权限依赖

      • KILL 命令的执行权限取决于 PROCESS 或 SUPER 权限
        • 如果用户有 PROCESS 权限,可以 KILL 自己的会话(即自己建立的连接)。
        • 如果用户有 SUPER 权限,可以 KILL 任意会话(包括其他用户的会话)。
      • 即使只授予 SELECT 权限,某些情况下用户仍然可以 KILL 自己的会话
        • 在 MySQL 5.7+,如果用户有 CONNECTION_ADMIN(或 SUPER 权限的替代),可能仍然可以 KILL 会话。
        • 在 MySQL 8.0+,引入了更细粒度的权限控制,但默认情况下,某些操作仍然可能允许 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的资料请关注骃骐网其它相关文章!

      您可能感兴趣的文章:

      • 详解MySQL kill 指令的执行原理
      • 关于MySql的kill命令详解
      • mysql kill process解决死锁问题
      • MySQL kill不掉线程的原因
      • MySQL kill指令使用指南

      相关推荐:

      Python中如何对NumPy数组执行快速幂运算_使用power函数实现向量化

      np.power 比 快因底层C向量化实现,避免Python循环开销;支持out/where/dtype等参数,更安全可控;对负底数非整指数默认报错,而 静默返回nan;np.float_power专为负底数浮点指数设计。 为什么 np.power 比循环调用 ** 快得多 因为 np.power 是底层 C 实现的向量化函数,它一次性处理整个数组,避免 Python 循环开销和逐元素类型检查。而...

      如何修复循环仅执行一次的矩阵零值检测逻辑

      本文解析了因函数逻辑错误导致 while 循环提前终止的根本原因,并提供使用 any() 优化零值检测的正确实现方案,确保矩阵中所有零元素被彻底处理。 本文解析了因函数逻辑错误导致 while 循环提前终止的根本原因,并提供使用 `any()` 优化零值检测的正确实现方案,确保矩阵中所有零元素被彻底处理。 问题核心在于 not_solved() 函数的逻辑缺陷:它并未真正判断“矩阵中是否存在零”,...

      如何优雅地捕获并处理 pandas.concat 的异常以继续执行程序

      本文介绍在使用 pandas 读取多个 csv 文件并合并时,如何正确捕获空文件等导致的异常,避免程序中断,同时保留日志反馈和流程可控性。 本文介绍在使用 pandas 读取多个 csv 文件并合并时,如何正确捕获空文件等导致的异常,避免程序中断,同时保留日志反馈和流程可控性。 在批量处理 CSV 元数据文件(如 metadata_files 列表)时,常见问题包括:文件为空、格式损坏、编码不兼容...

      Python pytest怎么在报告中展示用例执行耗时_使用--durations参数

      --durations 统计每个测试项从 fixture setup 到 teardown 的完整耗时(含 fixture 开销),默认不显示;设为正整数(如 --durations=5)输出最慢的 N 个,--durations=0 输出所有用例倒序列表,单位秒、精度毫秒。 pytest --durations 显示耗时的原理和默认行为 pytest 默认不展示用例执行时间,--duration...

      如何在Python中执行在线学习模型更新_使用Creme或River库处理流数据

      River 是当前唯一活跃、API 稳定、文档完整的在线学习框架,取代已停止维护且不兼容新 Python/NumPy 版本的 Creme;其核心为单样本增量更新 learn_one(),需手动处理数据映射、缺失值、类别编码及概念漂移检测,并注意序列化、线程安全与指标监控等部署细节。 在线学习模型更新不是“训练完再加载”,而是模型必须能接收单条或小批量新数据、实时调整参数——Creme 已停止维护,...

      Windows 上 py 命令未指向最新 Python 版本的解决方法

      Windows 的 py 启动器默认应调用系统中最新安装的 Python,但若 py --version 与 python3 --version 显示不同版本,说明启动器的默认配置未同步——可通过 py -0p 查看已注册版本,并用 py -3.12 --default 手动设为最新版。 windows 的 `py` 启动器默认应调用系统中最新安装的 python,但若 `py --version...

      如何在 PuLP 中约束每项任务仅由一名员工执行

      本文介绍如何使用 PuLP 建模「每项任务最多分配给一名员工」的逻辑约束,通过引入二元分配变量与大M法(Big-M)将“是否参与”与“实际工时”解耦,解决整数规划中无法直接对决策变量做逻辑比较(如 var > 0)的核心难点。 本文介绍如何使用 pulp 建模「每项任务最多分配给一名员工」的逻辑约束,通过引入二元分配变量与大m法(big-m)将“是否参与”与“实际工时”解耦,解决整数规划中无...

      PuLP 教程:如何约束每个任务仅由一名员工执行

      本文详解在 pulp 中建模“单任务单人”约束的方法——通过引入二元分配变量与连续工时变量,并结合大m法(big-m)建立逻辑关联,确保每个任务最多被一名员工承担。 本文详解在 pulp 中建模“单任务单人”约束的方法——通过引入二元分配变量与连续工时变量,并结合大m法(big-m)建立逻辑关联,确保每个任务最多被一名员工承担。 在资源分配类整数规划问题中,一个常见但易被忽视的关键约束是:每个任务...

      Windows 系统中 py 命令未指向最新 Python 版本的解决方法

      Windows 的 py 启动器默认应调用系统最新 Python,但实际可能因注册表配置滞后而指向旧版本;可通过 py -0p 查看已注册版本,并用 py -3.12 --default 显式设置默认版本。 windows 系统中 `py` 启动器默认应调用系统最新 python,但实际可能因注册表配置滞后而指向旧版本;可通过 `py -0p` 查看已注册版本,并用 `py -3.12 --def...