MySQL数据库之用户管理与权限控制的完整指南

 更新时间:2026年05月18日 08:47:06   作者:重生之小比特  
MySQL用户权限管理是保障数据库安全的关键环节,本文详细介绍了MySQL用户管理的核心操作,包括用户的创建,删除,密码修改等,帮你快速掌握安全合规的用户权限管理方法

在 MySQL 数据库的日常使用与运维中,用户管理权限控制是保障数据安全的核心环节。如果所有操作都使用 root 超级用户,一旦账号泄露,整个数据库将面临毁灭性风险。本文将从零开始,详细讲解 MySQL 用户的创建、删除、密码修改,以及权限的授予、回收、查看等全套操作,帮你快速掌握安全合规的用户权限管理方法。

一、为什么要做 MySQL 用户管理?

在生产环境或多人协作场景中,绝对不能所有人都用 root 账号。root 拥有数据库的所有权限,可删库、可改表、可访问所有数据,风险极高。

正确的做法是:按业务分工创建专用用户,分配最小必要权限

  • 张三只负责 mytest 库,就只给 mytest 库的操作权限
  • 李四只负责 msg 库,就只给 msg 库的操作权限
  • 普通开发只给查询权限,运维才授予部分管理权限

通过最小权限原则,能极大降低误操作、数据泄露、恶意删库的风险。

二、MySQL 用户信息存哪里?

MySQL 的所有用户信息,都存储在系统库 mysqluser 表中。

1. 查看用户信息

-- 切换到系统库
use mysql;

-- 查看关键用户信息
select host, user, authentication_string from user;

2. 关键字段解释

  • host:允许登录的主机地址
    • localhost:仅允许本机登录
    • %:允许所有 IP 登录(生产环境慎用)
    • 具体 IP:仅允许该 IP 登录(最安全)
  • user:用户名
  • authentication_string:密码加密后的值(MySQL 不存储明文密码)
  • *_priv:各类权限字段,标记用户拥有的权限

三、用户管理核心操作

1. 创建用户

语法

create user '用户名'@'登录主机' identified by '密码';

示例

-- 创建仅本机登录的用户 whb,密码 12345678
create user 'whb'@'localhost' identified by '12345678';

常见问题:密码强度不足

报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

解决方法:

-- 查看密码策略
SHOW VARIABLES LIKE 'validate_password%';

-- 临时降低密码策略(测试环境)
set global validate_password_policy=0;
set global validate_password_length=4;

安全提醒:不要创建 % 允许所有主机登录的用户,除非业务必需。

2. 删除用户

语法

drop user '用户名'@'登录主机';

错误示范

-- 错误:默认匹配 %,找不到用户
drop user whb;

正确示例

-- 删除本机登录的 whb 用户
drop user 'whb'@'localhost';

3. 修改用户密码

① 用户修改自己的密码

set password=password('新密码');

② root 修改其他用户密码

set password for 'whb'@'localhost'=password('87654321');

四、MySQL 权限体系

MySQL 内置了完整的权限列表,覆盖库、表、视图、存储过程、服务器管理等维度。

常用权限速查

权限作用作用范围
SELECT查询数据表 / 视图
INSERT插入数据
UPDATE更新数据
DELETE删除数据
CREATE创建库 / 表 / 索引库 / 表
DROP删除库 / 表库 / 表
ALTER修改表结构
INDEX创建索引
ALL PRIVILEGES所有权限任意对象

五、权限控制核心操作

1. 给用户授权

新创建的用户默认无任何权限,必须手动授权。

语法

grant 权限列表 on 库.对象 to '用户名'@'登录主机' [identified by '密码'];

权限写法说明

  • 单个权限:grant select on ...
  • 多个权限:grant select, insert, update on ...
  • 所有权限:grant all privileges on ...

授权范围

  • *.*:所有库的所有对象
  • 库名.*:指定库下所有表 / 对象
  • 库名.表名:指定库的指定表

示例

-- 给 whb 授予 test 库所有表的查询权限
grant select on test.* to 'whb'@'localhost';

-- 给 whb 授予 test 库所有权限
grant all privileges on test.* to 'whb'@'localhost';

2. 查看用户权限

-- 查看指定用户权限
show grants for 'whb'@'localhost';

3. 权限不生效?刷新权限

授权后若未立即生效,执行:

flush privileges;

4. 回收权限

语法

revoke 权限列表 on 库.对象 from '用户名'@'登录主机';

示例

-- 回收 whb 在 test 库的所有权限
revoke all on test.* from 'whb'@'localhost';

六、完整实操流程(一步一验)

root 登录,创建用户

create user 'whb'@'localhost' identified by '12345678';

授权

grant select on test.* to 'whb'@'localhost';
flush privileges;

新开终端,用 whb 登录

mysql -uwhb -p

验证权限

  • 可查看 test 库、可查询表数据
  • 执行删除 / 插入会报错:权限不足

回收权限

revoke all on test.* from 'whb'@'localhost';

再次验证:test 库消失,无法访问

七、安全最佳实践

  1. 禁止使用 root 账号日常开发
  2. host 尽量用具体 IP/localhost,不用 %
  3. 权限最小化:能给查询就不给修改,能给单库就不给全库
  4. 密码复杂度要高,定期更换
  5. 定期清理无用用户,回收闲置权限
  6. 生产环境禁止随意 grant all

总结

MySQL 用户管理与权限控制是数据库安全的第一道防线。核心就三件事:

  1. 创建专用用户,限定登录主机
  2. 授予最小权限,按需分配
  3. 及时回收 / 清理,保持权限合规

掌握本文所有命令,你就能独立完成企业级 MySQL 用户权限维护,远离删库跑路风险。

到此这篇关于MySQL数据库之用户管理与权限控制的完整指南的文章就介绍到这了,更多相关MySQL用户管理与权限控制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql数据库是做什么的

    mysql数据库是做什么的

    在本篇文章里小编给大家整理的是一篇关于mysql数据库是做什么的先关知识点内容,有兴趣的朋友们可以学习下。
    2020-06-06
  • MYSQL多表联查on和where的区别小结

    MYSQL多表联查on和where的区别小结

    在使用left join时过滤条件放到on后面还是where后面是有区别的,如果没有搞清楚他们的区别,连表汇总的结果就会变少或者变多,本文就来详细介绍一下两者的区别,感兴趣的可以了解一下
    2023-11-11
  • 详解如何在MySQL中自动生成和更新时间戳

    详解如何在MySQL中自动生成和更新时间戳

    在数据库设计中,时间戳字段(如 create_time 和 update_time)是非常常见的需求,它们通常用于记录数据的创建时间和最后更新时间,以便于数据追踪和分析,本文将深入探讨如何在 MySQL 中设置自动生成和更新时间戳字段,需要的朋友可以参考下
    2025-02-02
  • 如何解决MySQL安装遇到Start service红叉问题

    如何解决MySQL安装遇到Start service红叉问题

    在安装MySQL时,若遇到StartService步骤打红叉无法继续,可通过计算机管理以管理员身份运行服务,找到MySQL服务,更改为本地系统账户登录,解决安装问题,此方法为实际操作经验,可供参考,确保安装顺利完成
    2024-10-10
  • MySQL性能优化之分区表的使用详解

    MySQL性能优化之分区表的使用详解

    在当今数据驱动的时代,大型数据库的性能优化对于企业的成功至关重要,本文将深入探讨MySQL分区表的基础知识、性能优势、分区策略的选择和实施等内容,感兴趣的小伙伴可以了解一下
    2023-06-06
  • MySQL数据库约束和多表查询实例代码

    MySQL数据库约束和多表查询实例代码

    这篇文章主要介绍了MySQL数据库约束和多表查询的相关资料,文中通过代码介绍的非常详细,还总结了SQL执行顺序,为后续索引与事务内容做铺垫,需要的朋友可以参考下
    2025-07-07
  • mysql中找不到my.ini文件的问题及解决

    mysql中找不到my.ini文件的问题及解决

    这篇文章主要介绍了mysql中找不到my.ini文件的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • mysql逗号分隔的一行数据转为多行数据的两种方法

    mysql逗号分隔的一行数据转为多行数据的两种方法

    本文主要介绍了两种将MySQL中逗号分隔的一行数据转换为多行数据的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • MySQL中的insert-on-duplicate语句举例详解

    MySQL中的insert-on-duplicate语句举例详解

    这篇文章主要给大家介绍了关于MySQL中insert-on-duplicate语句的相关资料,文中通过图文以及代码示例将insert-on-duplicate的用法介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-06-06
  • 在一台服务器上安装两个或多个mysql的实现步骤

    在一台服务器上安装两个或多个mysql的实现步骤

    这篇文章给大家介绍如何在一台服务器上安装两个或多个mysql的实现步骤,有需要的朋友们可以参考学习,下面跟着小编一起来看看吧。
    2016-09-09

最新评论