system_user权限仅控制用户账户管理操作(如create/alter/drop user、修改密码或认证插件),不涉及数据访问或sql执行;即使拥有all privileges,缺失该权限也无法操作用户元数据,且root默认不具此权限,需显式授予。

SYSTEM_USER权限到底管什么
它不负责查数据、建表或执行SQL,只控制“谁可以管理用户账户”——包括创建、删除、重命名、锁定/解锁其他用户,以及修改其密码或认证插件。哪怕你有ALL PRIVILEGES,只要没SYSTEM_USER,就无法执行DROP USER 'xxx'或ALTER USER ... IDENTIFIED WITH ...。
为什么root默认没有SYSTEM_USER
MySQL 8.0把账户管理权从“隐式继承”改成显式授权,root账户在初始化时只带传统权限(如SELECT、CREATE USER),但不自动拥有SYSTEM_USER。所以当你用root去删一个带SYSTEM_USER权限的用户时,会报ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s)。
yuanfang-skills 的共享设计系统,提供 token CSS 变量、12+ 主题以及可复用的布局类型 HTML 块,供 yuanfang-html-image(以及 fu...)使用。
如何安全授予SYSTEM_USER
必须明确指定作用范围,并避免扩大影响:
- 只授给真正需要管理用户的账号,比如DBA专用账户:
GRANT SYSTEM_USER ON *.* TO 'dba_admin'@'192.168.10.%'; - 不要授给应用账号或通配符主机(如
'%'),防止被横向提权 - 若需让root具备该能力,执行:
GRANT SYSTEM_USER ON *.* TO 'root'@'localhost';(注意:不能写'root'@'%',否则远程root也能删系统用户) - 授完立刻验证:
SHOW GRANTS FOR 'dba_admin'@'192.168.10.%';,确认输出里含SYSTEM_USER
容易被忽略的连锁反应
一旦某个用户被授予SYSTEM_USER,他就成了“账户管理员”,能操作所有用户(包括root),但反过来——如果你只是想让某人能删普通用户,又不想让他碰系统级账户,MySQL 8.0没提供更细粒度的开关。这意味着SYSTEM_USER是当前最粗粒度的账户管控权限,授之前得确认对方角色是否真的需要跨账户管理能力,而不是仅需CREATE USER或DROP ROLE这类局部权限。










