1 ~> MySQL 用户管理
1.1 用户信息存储
1.1.1 底层原理
MySQL 的所有用户账号、密码、权限信息均存储在mysql 系统数据库的 user 表中。用户管理的本质,就是对该系统表进行增删改查操作,官方 SQL 语句是对底层表操作的封装。
1.1.2 user 表核心字段
字段名 作用说明
host 允许用户登录的主机地址:localhost表示仅本地登录,指定 IP 表示仅该地址可登录,%为通配符表示任意主机
user 用户名
authentication_string 哈希加密后的用户密码,无明文存储
*_priv系列字段 对应各项权限,Y表示拥有权限,N表示无权限
password_expired 密码是否过期
account_locked 账号是否被锁定
1.1.3 用户查询语句
-- 切换至mysql系统库
USE mysql;
-- 查询用户核心信息
SELECT host, user, authentication_string FROM user;
-- 查看user表完整结构
DESC user;
1.2 创建用户
1.2.1 标准语法(唯一推荐方式)
CREATE USER '用户名'@'登录主机' IDENTIFIED BY '密码';
- 密码以明文输入,MySQL 自动通过哈希算法加密后存入系统表,不会明文存储
- 用户名与主机地址为一个整体,同一用户名对应不同主机视为不同账号
1.2.2 本地用户创建
仅允许从数据库所在服务器本机登录,安全性最高
-- 创建用户whb,仅本地登录,密码为12345678
CREATE USER 'whb'@'localhost' IDENTIFIED BY '12345678';
1.2.3 远程用户创建
允许从外部主机登录
-- 允许任意主机登录(生产环境禁用)
CREATE USER 'whb'@'%' IDENTIFIED BY '123321';
-- 允许指定IP登录(生产环境推荐)
CREATE USER 'whb'@'192.168.1.100' IDENTIFIED BY '123456';
1.2.4 新建用户默认权限
新建用户默认仅拥有USAGE权限,即仅可登录数据库,无法查看业务库、无法执行数据操作,仅能访问information_schema等系统库。
1.3 删除用户
1.3.1 标准语法
DROP USER '用户名'@'登录主机';
- 必须完整指定用户名 + 主机,仅写用户名时 MySQL 默认匹配
@'%',会导致删除对应主机的用户失败。
1.3.2 示例
-- 删除本地登录的whb用户
DROP USER 'whb'@'localhost';
-- 删除允许任意主机登录的whb用户
DROP USER 'whb'@'%';
1.4 修改用户密码
1.4.1 管理员修改指定用户密码
-- MySQL 5.7 标准语法
SET PASSWORD FOR 'whb'@'%' = PASSWORD('1234abcd');
-- MySQL 8.0 标准语法(PASSWORD函数已废弃)
ALTER USER 'whb'@'%' IDENTIFIED BY '1234abcd';
1.4.2 用户修改自身密码
-- MySQL 5.7 语法
SET PASSWORD = PASSWORD('新密码');
-- MySQL 8.0 语法
ALTER USER USER() IDENTIFIED BY '新密码';
1.5 权限刷新机制
1.5.1 语法
FLUSH PRIVILEGES;
1.5.2 生效逻辑
MySQL 的权限校验基于内存中的权限数据,而非直接读取磁盘系统表
必须执行的场景:直接通过 DML 语句修改 mysql 系统表后,需手动刷新将磁盘数据加载到内存
无需执行的场景:使用官方 DDL 语句(CREATE USER、GRANT 等)操作时,MySQL 自动同步内存权限
2 ~> MySQL 权限管理
2.1 权限体系
2.1.1 权限粒度(作用范围)
按作用域从大到小分为 4 个层级,校验时按层级逐级匹配:
- 全局级(
*.*):作用于 MySQL 实例下所有数据库的所有对象 - 库级(
库名.*):作用于指定数据库内的所有表、视图等对象 - 表级(
库名.表名):作用于指定库的指定数据表 - 列级:作用于表内指定字段(需单独授权)
2.1.2 核心权限清单
权限名称 对应系统表字段 权限说明
SELECT Select_priv 查询表数据
INSERT Insert_priv 插入表数据
UPDATE Update_priv 更新表数据
DELETE Delete_priv 删除表数据
CREATE Create_priv 创建数据库、表、索引
DROP Drop_priv 删除数据库、表、视图
ALTER Alter_priv 修改表结构
INDEX Index_priv 创建、删除索引
GRANT OPTION Grant_priv 将自身拥有的权限授予其他用户
CREATE VIEW Create_view_priv 创建视图
SHOW VIEW Show_view_priv 查看视图定义
EXECUTE Execute_priv 执行存储过程与函数
FILE File_priv 读写服务器主机上的文件
CREATE USER Create_user_priv 创建、删除、修改用户
SHOW DATABASES Show_db_priv 查看所有数据库列表
SUPER Super_priv 超级管理员权限,可执行各类管理操作
USAGE - 基础登录权限,无其他操作权限,新建用户默认拥有