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
。
- 在 MySQL 5.7+,如果用户有
3. 为什么 SELECT 权限的用户可以 KILL?
- 可能的原因:
- 用户隐式拥有
PROCESS
权限(检查mysql.user
表确认)。 - MySQL 的版本差异(某些版本默认允许
KILL
自己的会话)。 - 用户属于某个角色(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)编程其它相关文章!
精彩评论