【MYSQL】MYSQL学习的一大重点:用户与权限管理

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 个层级,校验时按层级逐级匹配:

  1. 全局级*.*):作用于 MySQL 实例下所有数据库的所有对象
  2. 库级库名.*):作用于指定数据库内的所有表、视图等对象
  3. 表级库名.表名):作用于指定库的指定数据表
  4. 列级:作用于表内指定字段(需单独授权)

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 - 基础登录权限,无其他操作权限,新建用户默认拥有

上一篇 在网络中,二层交换机和三层交换机的使用场景有哪些区别
下一篇 远程访问工具性价比高、稳定的是哪一家? ?