在生产环境中,直接使用root用户操作数据库存在巨大安全隐患 —— 一旦账号泄露,攻击者可随意修改或删除所有数据。MySQL 的用户管理功能通过 “精细化创建用户 + 按需分配权限”,解决这一问题(如让 “张三” 仅能操作mytest库,“李四” 仅能操作msg库)。本文基于《MySQL 用户管理.pdf》,系统讲解用户的创建、删除、密码修改,以及权限的授予与回收,帮你搭建安全的数据库访问体系。
一、用户管理基础:MySQL 用户的核心信息
MySQL 的所有用户信息都存储在系统数据库mysql的user表中,理解这些信息是管理用户的前提。
1.1 用户表关键字段(文档 13.1.1)
| 字段名 | 含义 |
|---|---|
host | 允许用户登录的主机 / IP(localhost表示仅本机登录,%表示任意主机登录) |
user | 用户名(与host组合唯一标识一个用户,如'whb'@'localhost') |
authentication_string | 用户密码的加密字符串(通过password()函数加密,不存储明文) |
*_priv | 权限字段(如Select_priv表示查询权限,Create_priv表示创建权限) |
1.2 查看用户信息(文档 13.1.1)
通过查询mysql.user表,可查看当前数据库中所有用户:
-- 切换到系统数据库mysql
USE mysql;
-- 查看用户的核心信息(用户名、登录主机、加密密码)
SELECT host, user, authentication_string FROM user;
输出示例:
+-----------+------------------+-------------------------------------------+
| host | user | authentication_string |
+-----------+------------------+-------------------------------------------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+------------------+-------------------------------------------+
二、用户操作实战:创建、删除与密码修改
用户管理的核心操作包括 “创建用户”“删除用户”“修改密码”,需严格按照语法执行,避免权限泄露。
2.1 创建用户:控制登录范围与密码(文档 13.1.2)
语法
CREATE USER '用户名'@'登录主机/IP' IDENTIFIED BY '密码';
关键说明:
登录主机/IP:不能省略,localhost仅允许本机登录,%允许任意主机登录(不推荐,风险高);
密码强度:MySQL 默认开启密码策略,简单密码(如123456)会报错,需符合长度、复杂度要求(可通过SHOW VARIABLES LIKE 'validate_password%'查看策略)。
实战案例:创建仅本机登录的用户whb
-- 创建用户whb,仅允许从本机(localhost)登录,密码12345678
CREATE USER 'whb'@'localhost' IDENTIFIED BY '12345678';
-- 验证:查看用户是否创建成功
SELECT host, user, authentication_string FROM user WHERE user = 'whb';
输出结果:新增'whb'@'localhost'用户,authentication_string为密码加密后的字符串。
2.2 删除用户:精准定位用户(文档 13.1.3)
删除用户时必须指定 “用户名 + 登录主机”(仅用户名无法唯一标识用户,默认会按'用户名'@'%'查找,导致删除失败)。
语法
DROP USER '用户名'@'登录主机';
实战案例:删除'whb'@'localhost'用户
-- 错误示例:仅指定用户名,默认查找'whb'@'%',删除失败
DROP USER whb;
-- 错误:ERROR 1396 (HY000): Operation DROP USER failed for 'whb'@'%'
-- 正确示例:指定用户名+登录主机
DROP USER 'whb'@'localhost';
-- 验证:用户已删除
SELECT host, user FROM user WHERE user = 'whb'; -- 无结果
2.3 修改密码:自己改 vs 管理员改(文档 13.1.4)
MySQL 支持两种修改密码的场景:用户自己修改密码、root管理员修改其他用户密码。
场景 1:用户自己修改密码
-- 登录用户后,直接修改当前用户密码
SET PASSWORD = PASSWORD('新密码');
场景 2:root修改其他用户密码
-- 语法:SET PASSWORD FOR '用户名'@'登录主机' = PASSWORD('新密码');
SET PASSWORD FOR 'whb'@'localhost' = PASSWORD('87654321');
-- 验证:查看密码是否更新(authentication_string变化)
SELECT host, user, authentication_string FROM user WHERE user = 'whb';
三、权限管理:授予与回收,按需分配权限
新创建的用户默认无任何权限(无法查看数据库、操作表),需通过GRANT授予权限;当用户不再需要某权限时,用REVOKE回收,实现 “最小权限原则”。
3.1 MySQL 核心权限列表(文档 13.2)
常用权限及适用范围如下,授予时需根据业务需求选择,避免过度授权:
| 权限 | 适用范围 | 功能描述 |
|---|---|---|
SELECT | 表 / 视图 | 查询数据(如SELECT * FROM 表) |
INSERT/UPDATE/DELETE | 表 | 插入、修改、删除数据 |
CREATE/DROP | 数据库 / 表 / 视图 | 创建或删除数据库、表、视图 |
ALTER | 表 | 修改表结构(如ALTER TABLE 表 ADD 字段) |
ALL PRIVILEGES | 任意对象 | 授予指定范围内的所有权限(谨慎使用) |
GRANT OPTION | 任意对象 | 允许用户将自己的权限授予其他用户(不推荐普通用户) |
3.2 授予权限:GRANT语法与案例(文档 13.2.1)
语法
GRANT 权限列表 ON 库.对象名 TO '用户名'@'登录主机' [IDENTIFIED BY '密码'];
关键参数:
权限列表:多个权限用逗号分隔(如SELECT, INSERT),ALL表示所有权限;
库.对象名:*.*表示所有数据库的所有对象,test.*表示test库的所有对象,test.account表示test库的account表;
IDENTIFIED BY(可选):若用户不存在,创建用户并设置密码;若用户已存在,仅授予权限并修改密码。
实战案例:给whb授予test库的查询权限
-- 1. root登录,授予whb对test库所有表的SELECT权限
GRANT SELECT ON test.* TO 'whb'@'localhost';
-- 2. 验证:切换到whb用户,查看权限是否生效
-- 登录whb用户后:
SHOW DATABASES; -- 可见test库(之前不可见)
USE test;
SELECT * FROM account; -- 可查询数据
DELETE FROM account; -- 无删除权限,报错:ERROR 1142 (42000): DELETE command denied
3.3 回收权限:REVOKE语法与案例(文档 13.2.2)
当用户不再需要某权限时,用REVOKE回收,避免权限滥用。
语法
REVOKE 权限列表 ON 库.对象名 FROM '用户名'@'登录主机';
实战案例:回收whb对test库的所有权限
-- 1. root登录,回收whb对test库的所有权限
REVOKE ALL ON test.* FROM 'whb'@'localhost';
-- 2. 验证:切换到whb用户
SHOW DATABASES; -- 仅可见information_schema,test库消失
USE test; -- 报错:ERROR 1044 (42000): Access denied for user 'whb'@'localhost' to database 'test'
3.4 权限生效与查看
权限生效:授予或回收权限后,若用户已登录,需执行FLUSH PRIVILEGES刷新权限,否则权限不生效;
查看权限:通过SHOW GRANTS FOR '用户名'@'登录主机'查看用户当前拥有的权限:
-- 查看whb的权限
SHOW GRANTS FOR 'whb'@'localhost';
四、用户管理安全原则与实战建议
- 最小权限原则:仅授予用户业务必需的权限(如给 “报表用户” 仅授予
SELECT权限,不给DELETE/DROP权限); - 限制登录主机:避免使用
%(任意主机登录),优先指定具体 IP(如'whb'@'192.168.1.100'),降低账号泄露风险; - 强密码策略:强制用户使用复杂密码(含大小写、数字、特殊字符),通过
validate_password插件控制密码强度; - 定期审计:定期查看用户列表(
SELECT host, user FROM mysql.user)和权限(SHOW GRANTS),删除无用用户,回收冗余权限。
五、总结
MySQL 用户管理的核心是 “精细化控制”—— 通过创建专用用户、按需分配权限,既保障数据库安全,又不影响业务操作。关键要点如下:
- 用户操作:创建用户需指定 “用户名 + 登录主机”,删除用户需精准定位,修改密码区分 “自改” 和 “管理员改”;
- 权限操作:用
GRANT授予权限、REVOKE回收权限,遵循 “最小权限原则”,避免过度授权; - 安全建议:限制登录主机、使用强密码、定期审计,筑牢数据库安全防线。
1541

被折叠的 条评论
为什么被折叠?



