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

 更新时间:2025年05月22日 08:30:53   作者:学亮编程手记  
在 MySQL 中,即使用户只有 SELECT 权限,仍然可以执行 SHOW PROCESSLIST 和 KILL 命令,那么如何彻底禁止用户执行 KILL?本文给大家详细介绍了MySQL彻底禁止用户执行KILL的解决方法,需要的朋友可以参考下

在 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查询性能优化的7个常见查询错误及解决方案

    MySQL查询性能优化的7个常见查询错误及解决方案

    数据库性能是Web应用和大型软件系统稳定运行的关键,即使是精心设计的应用,如果数据库查询效率低下,也会导致用户体验下降、系统资源浪费,甚至系统崩溃,本文将深入探讨MySQL查询优化,分析常见的查询错误,并提供提升数据库性能的实用技巧,需要的朋友可以参考下
    2025-04-04
  • MySQL 全文索引的原理与缺陷

    MySQL 全文索引的原理与缺陷

    这篇文章主要介绍了MySQL 全文索引的原理与缺陷,帮助大家更好的理解和使用MySQL中的索引,感兴趣的朋友可以了解下
    2020-12-12
  • 关于MySQL的存储函数(自定义函数)的定义和使用方法详解

    关于MySQL的存储函数(自定义函数)的定义和使用方法详解

    本文主要讲解了关于MySQL的存储函数(自定义函数)的定义和使用方法详解与存储函数与存储过程的区别
    2018-03-03
  • 通过sysbench工具实现MySQL数据库的性能测试的方法

    通过sysbench工具实现MySQL数据库的性能测试的方法

    sysbench是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试。这篇文章主要介绍了通过sysbench工具实现MySQL数据库的性能测试 ,需要的朋友可以参考下
    2019-07-07
  • MYSQL加密和压缩函数详解以及实战(附示例)

    MYSQL加密和压缩函数详解以及实战(附示例)

    这篇文章主要给大家介绍了关于MYSQL加密和压缩函数详解以及实战的相关资料,加密函数主要用来对数据进行加密和界面处理,以保证某些重要数据不被别人获取,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • MySQL错误提示:sql_mode=only_full_group_by完美解决方案

    MySQL错误提示:sql_mode=only_full_group_by完美解决方案

    有时候遇到数据库重复数据,需要将数据进行分组,并取出其中一条来展示,这时就需要用到group by语句,下面这篇文章主要给大家介绍了关于MySQL错误提示:sql_mode=only_full_group_by的完美解决方案,需要的朋友可以参考下
    2022-10-10
  • CentOS7下二进制安装mysql 5.7.23

    CentOS7下二进制安装mysql 5.7.23

    这篇文章主要为大家详细介绍了CentOS7下二进制安装mysql 5.7.23,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • 为什么MySQL数据库索引选择使用B+树?

    为什么MySQL数据库索引选择使用B+树?

    今天小编就为大家分享一篇关于为什么MySQL数据库索引选择使用B+树?,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • SQL去重的3种实用方法总结

    SQL去重的3种实用方法总结

    SQL去重是数据分析工作中比较常见的一个场景,下面这篇文章主要给大家介绍了关于SQL去重的3种实用方法的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • MySQL连表查询从基础到实战案例

    MySQL连表查询从基础到实战案例

    本文介绍了MySQL连表查询的各种类型,包括内连接、左外连接、右外连接、全外连接、交叉连接和自连接,文章还讨论了多表连接的性能优化技巧,通过实战案例和常见误区的分析,帮助读者更好地理解和应用连表查询,感兴趣的朋友跟随小编一起看看吧
    2026-01-01

最新评论