直接 revoke create user 权限即可生效:mysql 8.0+ 中 create user 是独立全局权限,须用 revoke create user on . from 'user'@'host' 撤销,作用域不可省略,不依赖 mysql.user 表操作,撤销后立即生效。

直接 revoke CREATE USER 权限即可生效
MySQL 8.0+ 中,CREATE USER 是一个独立的全局权限(global privilege),不是隐含在 ALL PRIVILEGES 或 GRANT OPTION 里的。只要用户拥有该权限,就能执行 CREATE USER;反之,只要显式撤销它,就无法新建账号。
执行这条命令就能禁止:
REVOKE CREATE USER ON *.* FROM 'admin_user'@'192.168.5.%';
注意:ON *.* 不能省略,因为 CREATE USER 只能在全局层级授/撤,不支持库级或表级作用域。
常见错误现象:
- 只
REVOKE INSERT, UPDATE ON mysql.user—— 没用,CREATE USER不走mysql.user表写入路径 - 误以为
GRANT OPTION控制建用户能力 —— 实际上它只控制能否把已有权限再授给他人 - 忘记
FLUSH PRIVILEGES—— 其实不用,REVOKE立即生效(MySQL 5.7+)
为什么不能靠限制 mysql.user 表权限来阻止建用户
CREATE USER 是专用 DDL 语句,底层不通过常规 SQL 更新 mysql.user 表实现(MySQL 8.0 起甚至改用数据字典表存储用户信息)。所以即使你 REVOKE INSERT ON mysql.user,对 CREATE USER 完全无影响。
验证方式:用目标用户登录后执行
支持从 AWS、阿里云、GCP、华为云、Azure 向腾讯云迁移的 Landing Zone 全流程客户端。通过远程 MCP Server 自动完成:扫描源云资源(5朵云13种资源)、AI智能填充调研问卷、生成设计文档、生成Terraform代码。当用户提到云迁移、Landing Zone、Terraform、扫...
CREATE USER 'test'@'localhost' IDENTIFIED BY '123';
如果报错 ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation,说明已成功禁止;否则权限还在。
补充说明:
-
ALTER USER、DROP USER同样依赖各自独立权限:ALTER USER、DROP USER - 单纯撤销
UPDATE权限对mysql库,可能影响其他管理操作(如手动更新authentication_string),但拦不住建用户
生产环境建议搭配角色与最小权限原则
如果你需要多个管理账号,且职责不同(比如一个只管密码重置、一个只管账号生命周期),推荐用角色隔离:
CREATE ROLE 'user_admin';<br>GRANT CREATE USER, DROP USER, ALTER USER ON *.* TO 'user_admin';<br>GRANT 'user_admin' TO 'ops_user'@'%';
然后对需限制的用户,只授予更窄的角色(如 'password_manager',仅含 ALTER USER)。
这样做的好处:
- 权限变更集中到角色,不用逐个用户
REVOKE - 避免因
GRANT ALL ON *.*导致权限过度扩散 - 配合
SET ROLE显式启用,审计时能看清每次会话实际用了哪套权限
别忽略 Host 匹配细节:'admin_user'@'192.168.5.%' 和 'admin_user'@'%' 是两个独立账号,撤销时必须精确匹配。










