信息发布→ 登录 注册 退出

mysql中创建与删除用户的命令与实践

发布时间:2026-01-08

点击量:
MySQL 8.0+ 创建用户需分步:先CREATE USER指定主机和密码,再GRANT最小权限;禁用DELETE FROM mysql.user,须用DROP USER删除;验证权限应使用SHOW GRANTS而非查表。

创建 MySQL 用户的正确语法与权限控制

MySQL 8.0+ 默认使用 mysql_native_password 插件,且不支持直接在 CREATE USER 中指定密码过期策略或账户锁定状态(这些需后续 ALTER USER 设置)。最安全、兼容性最好的建用户方式是分两步:先创建空密码/随机密码用户,再授权。

  • CREATE USER 'dev_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!'; —— 指定 IP 段访问,避免用 '%' 开放所有主机(尤其生产)
  • 若需兼容旧客户端(如某些 PHP PDO 连接失败),显式指定认证插件:CREATE USER 'dev_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Pass123';
  • 创建后必须用 GRANT 显式赋权,MySQL 8.0 不再允许 CREATE USER ... GRANT 合并在一条语句中
  • 最小权限原则:只给 SELECT, INSERT 而非 ALL PRIVILEGES,例如:GRANT SELECT, INSERT ON mydb.orders TO 'dev_user'@'192.168.1.%';

删除用户时常见的误操作与恢复风险

DROP USER 是唯一安全删除用户的命令,DELETE FROM mysql.user 直接删表记录会导致权限系统不一致、缓存未刷新、甚至 mysqld 重启失败。

  • DROP USER 'old_user'@'localhost'; —— 必须带 host,'old_user''old_user'@'localhost' 是两个不同账户
  • 执行后该用户所有权限自动清除,无需手动 REVOKE
  • 如果误删了 root 或高权限用户,且没有其他管理员账号,只能停库加 --skip-grant-tables 启动修复,非常麻烦
  • MySQL 8.0 删除用户后,其历史连接不会立即断开,但新连接会被拒绝;可配合 KILL 主动终止残留会话:KILL 12345;(ID 来自 SHOW PROCESSLIST;

验证用户是否存在及当前权限范围

别依赖 SELECT * FROM mysql.user 查看用户——字段含义复杂、加密密码不可读、host 匹配逻辑易误解。应使用系统视图和内置命令。

  • 查用户是否存在:SELECT User, Host FROM mysql.user WHERE User = 'test_user';
  • 查某用户具体权限:SHOW GRANTS FOR 'dev_user'@'192.168.1.%'; —— 输出的是可重放的授权语句,最直观
  • 查当前登录用户实际生效权限:SHOW GRANTS;(不带 FOR),这对调试连接后权限异常特别有用
  • 注意:Host 字段支持通配符(如 192.168.%),但匹配优先级按“最长前缀”规则,192.168.1.100 会优先匹配 192.168.1.% 而非 %
CREATE USER 'api_user'@'10.0.2.%' IDENTIFIED BY 'ApiToken$2025';
GRANT SELECT, UPDATE ON app_db.users TO 'api_user'@'10.0.2.%';
GRANT SELECT ON app_db.products TO 'api_user'@'10.0.2.%';
FLUSH PRIVILEGES;

最后一行 FLUSH PRIVILEGES 在绝大多数情况下不是必须的——只要用 CREATE USER/GRANT/DROP USER 等 DDL 命令操作,权限表已自动重载。仅当你手动修改了 mysql.user 表才需要它,而这种做法本身就不该发生。

标签:# 而非  # 重启  # 不带  # 在一  # 不支持  # 这对  # 当你  # 最好的  # 的是  # 是否存在  # mysql  # delete  # pdo  # select  # for  # ssl  # app  # word  # php  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!