以下是《MySQL 之用户管理》的详细讲解,适用于数据库运维、安全配置、权限管控等实际场景,也是面试常考模块之一。


🔐 MySQL 用户管理全面详解


📚 目录

  1. 用户管理概述
  2. 查看当前用户与用户列表
  3. 创建新用户
  4. 修改用户密码
  5. 删除用户
  6. 授权与权限控制(GRANT)
  7. 权限回收(REVOKE)
  8. 查看权限
  9. 用户管理最佳实践
  10. 常见问题与安全建议

1. 🧭 用户管理概述

MySQL 的用户管理主要是控制  可以访问数据库以及 可以做什么
用户身份由 用户名@主机名 构成,例如:

root@localhost
dev_user@%
  • localhost:表示只能本地连接
  • %:表示任意主机

2. 👀 查看当前用户与用户列表

查看当前登录用户:

SELECT USER(), CURRENT_USER();

查看所有用户:

SELECT host, user FROM mysql.user;

3. 🆕 创建新用户

语法:

CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';

示例:

CREATE USER 'testuser'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'dev'@'%' IDENTIFIED WITH mysql_native_password BY 'dev123';

⚠️ MySQL 8 之后使用 caching_sha2_password 作为默认认证方式,可能与某些客户端不兼容。


4. 🔑 修改用户密码

修改密码(推荐方式):

ALTER USER 'testuser'@'localhost' IDENTIFIED BY 'newpass';

旧版本方式:

SET PASSWORD FOR 'testuser'@'localhost' = PASSWORD('newpass');

5. 🗑️ 删除用户

DROP USER 'testuser'@'localhost';

删除用户会自动清除其所有权限记录。


6. 🛡️ 授权与权限控制(GRANT)

常见权限类型:

权限描述
SELECT读取权限
INSERT插入数据
UPDATE更新数据
DELETE删除数据
CREATE创建数据库、表等
DROP删除表或数据库
ALL PRIVILEGES所有权限

授权语法:

GRANT 权限列表 ON 数据库.表 TO '用户名'@'主机';

示例:

GRANT SELECT, INSERT ON shop.* TO 'dev'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

7. 🚫 回收权限(REVOKE)

回收语法:

REVOKE 权限列表 ON 数据库.表 FROM '用户名'@'主机';

示例:

REVOKE INSERT ON shop.* FROM 'dev'@'%';

8. 🔍 查看权限

查看指定用户权限:

SHOW GRANTS FOR '用户名'@'主机';

示例:

SHOW GRANTS FOR 'dev'@'%';

9. 🧠 用户管理最佳实践

实践建议原因
使用最小权限原则限制攻击面,防止误操作
不使用 root 用户进行开发连接提高数据库安全性
每个系统使用独立数据库用户便于权限管理和审计
为远程连接设置强密码 + 限定 IP避免暴力破解
定期检查权限和废弃用户避免权限泄露
开启 audit_log 插件(企业版)实现用户行为记录

10. 🧯 常见问题与安全建议

问题或隐患解决方案或建议
用户登录失败(Host 不匹配)检查用户@主机 格式是否正确
密码明文存储使用 IDENTIFIED BY 加密保存
用户误删可备份 mysql.user 表或使用 mysqldump
root 用户权限滥用设置只允许本地登录,并为 root 设置强密码
客户端连接失败检查防火墙、授权主机、加密方式兼容性

📁 参考资料