MySQL第7-9章 核心备考知识点

AAI脑图#3656472026-05-14 02:49
11520

内容详情

第7章 用户与权限(数据库安全)

7.1 用户与权限概述

  • 核心概念
    • 身份认证基础
      • 基于「用户@主机」双维度验证身份
        • 用户名:标识访问者身份
        • 主机地址:限制允许访问的来源
    • 权限体系层级(从上到下,优先级匹配从粗到细)
      • 全局级(
      • 数据库级(db_name.*):影响指定数据库
      • 表级(db_name.tbl_name):影响指定数据库的单张表
      • 列级:影响指定表的特定列
      • 存储过程/函数级:影响指定的存储对象
  • 权限存储与检查逻辑
    • 权限存储位置
      • mysql系统库的专用权限表
        • user表:存全局权限、用户基础信息
        • db表:存数据库级权限
        • tables_priv:存表级权限
        • columns_priv:存列级权限
        • procs_priv:存存储过程/函数级权限
    • 权限检查逻辑
      • 登录时:验证user表中「用户@主机」匹配 + 全局权限/密码
      • 后续操作:从全局级→数据库级→…逐层级检查更细粒度权限,命中则停止(优先满足细权限限制更安全)

7.2 用户管理

  • 创建用户
    • 基础语法
      • CREATE USER '用户名'@'主机地址' IDENTIFIED BY '密码';
    • 关键细节
      • 主机地址支持类型
        • localhost:仅允许本地套接字连接
        • 127.0.0.1:仅允许本地TCP/IP连接
        • %:任意主机(生产环境慎用)
        • 192.168.1.%:指定IP段
        • 具体IP/域名:仅单一来源
      • 支持批量创建:用逗号分隔多组「'用户'@'主机' IDENTIFIED BY '密码'」
      • 可配合GRANT直接赋予初始权限
  • 修改用户
    • 密码修改
      • 推荐语法:ALTER USER '用户'@'主机' IDENTIFIED BY '新密码';
      • 兼容旧版语法:SET PASSWORD FOR '用户'@'主机' = PASSWORD('新密码');
    • 身份信息修改
      • RENAME USER '旧用户'@'旧主机' TO '新用户'@'新主机';
    • 生效注意
      • 非GRANT/REVOKE方式(直接改表)需FLUSH PRIVILEGES或用户重登
  • 删除用户
    • 语法
      • DROP USER '用户'@'主机地址';
    • 关键机制
      • 同步回收该用户的所有权限,避免残留权限隐患

7.3 权限管理

  • 授予权限(GRANT)
    • 语法结构
      • GRANT 权限列表 ON 权限范围 TO '用户'@'主机' [WITH GRANT OPTION];
    • 常见权限分类
      • 数据操作类(DML):SELECT/INSERT/UPDATE/DELETE
      • 结构操作类(DDL):CREATE/ALTER/DROP/INDEX
      • 管理类:GRANT OPTION(授权传递)/SUPER(全局管理,改配置杀进程)/FILE(读写服务器文件)
    • WITH GRANT OPTION注意
      • 允许被授权用户将自身权限转授他人
      • 仅对已授予的
  • 查看权限
    • 快速查看命令
      • 查看当前用户:SHOW GRANTS;
      • 查看指定用户:SHOW GRANTS FOR '用户'@'主机';
    • 底层验证查询
      • 查询mysql.user/db等系统表获取细粒度权限配置
  • 回收权限(REVOKE)
    • 语法结构
      • REVOKE 权限列表 ON 权限范围 FROM '用户'@'主机';
    • 关键细节
      • 仅移除对应访问权限,不删除用户
      • 回收GRANT OPTION需单独执行:REVOKE GRANT OPTION ON ... FROM ...
  • 刷新权限(FLUSH PRIVILEGES)
    • 触发场景
      • 直接修改mysql系统权限表(而非GRANT/REVOKE/ALTER USER等官方命令)后
    • 说明
      • GRANT/REVOKE/ALTER USER/RENAME USER/DROP USER会自动刷新内存中的权限缓存,无需手动操作

第8章 视图(虚拟表管理)

8.1 初识视图

  • 视图定义
    • 基于SELECT查询结果构建的
  • 核心作用
    • 简化复杂查询:封装多表JOIN/子查询等复杂逻辑,用户直接用SELECT查视图
    • 数据安全:隐藏敏感列(如薪资、身份证号)或行(通过WHERE过滤)
    • 逻辑独立性:基表结构小幅度调整(如非核心列改名)时,修改视图定义即可,不影响上层应用
  • 视图与基表的区别
    • 物理存储:视图无,基表有
    • 依赖关系:视图依赖基表,基表删除则视图失效
    • 数据操作:视图受限制,基表无(需合规)

8.2 视图管理

  • 创建视图
    • 基础语法
      • CREATE VIEW 视图名 [(自定义列名1,自定义列名2,...)] AS SELECT子句 [WITH CHECK OPTION];
    • 关键细节
      • WITH CHECK OPTION:通过视图增删改数据时,必须符合SELECT子句的WHERE过滤条件
  • 查看视图
    • 快速命令
      • 查看视图结构:DESCRIBE/DESC 视图名;
      • 查看视图定义:SHOW CREATE VIEW 视图名;
    • 底层验证查询
      • 查询information_schema.views系统表获取所有视图信息
  • 修改视图
    • 基础语法
      • ALTER VIEW 视图名 [(自定义列名1,...)] AS SELECT子句 [WITH CHECK OPTION];
    • 限制
      • 与CREATE VIEW语法一致,相当于覆盖原视图定义
  • 删除视图
    • 语法
      • DROP VIEW [IF EXISTS] 视图名1,视图名2,...;
    • 影响
      • 仅删除视图定义,对基表无任何影响

8.3 视图数据操作(增删改)

  • 可更新视图的核心条件
    • 单表视图(无JOIN/UNION)
    • 无聚合函数(SUM/COUNT/MAX等)
    • 无DISTINCT/GROUP BY/HAVING/ORDER BY(部分排序无聚集可能允许,需视情况)
    • 视图列需包含基表的所有非空且无默认值的列(INSERT要求)
  • 常见操作说明
    • INSERT INTO 视图名:需满足基表约束+可更新条件+WITH CHECK OPTION(若有)
    • UPDATE 视图名:需满足可更新条件+WITH CHECK OPTION(若有)
    • DELETE FROM 视图名:需满足可更新条件(单表视图通常允许)

第9章 事务(数据一致性保障)

9.1 事务的核心概念

  • 事务定义
    • 一组
  • ACID特性(必考)
    • 原子性(Atomicity)
      • 操作不可分割,事务中所有SQL要么全执行,要么全不执行
    • 一致性(Consistency)
      • 事务前后,数据库必须从一个
    • 隔离性(Isolation)
      • 多个并发事务执行时,互不干扰,各自的中间状态对其他事务不可见
    • 持久性(Durability)
      • 事务一旦提交,对数据的修改是

9.2 事务处理

  • 基本操作
    • 开启事务
      • 显式开启:START TRANSACTION; / BEGIN;
    • 提交事务
      • COMMIT;:永久保存事务中所有修改
    • 回滚事务
      • ROLLBACK;:撤销事务中所有未提交的修改
  • 事务保存点
    • 作用
      • 允许部分回滚,而非全部撤销
    • 语法
      • 创建保存点:SAVEPOINT 保存点名称;
      • 回滚到指定点:ROLLBACK TO SAVEPOINT 保存点名称;
      • 删除保存点:RELEASE SAVEPOINT 保存点名称;
  • 自动提交模式
    • autocommit变量
      • 默认值:1(ON),即每条单SQL语句自动作为一个独立事务提交
      • 关闭方式:SET autocommit = 0; / SET autocommit = OFF;
    • 关闭场景
      • 需要执行多SQL组成的显式事务时(配合START TRANSACTION也可临时关闭)

9.3 事务日志(ACID的底层支撑)

  • redo日志(重做日志)
    • 作用
      • 实现
      • 采用
  • undo日志(回滚日志)
    • 作用
      • 实现
      • 实现

9.4 事务的隔离级别(高频考点)

  • 并发事务可能引发的问题
    • 脏读
      • 定义:事务A读取了事务B
    • 不可重复读
      • 定义:同一事务A内,两次读取同一行数据,结果不同(因事务B在中间提交了修改)
    • 幻读
      • 定义:同一事务A内,两次执行同一范围查询,结果行数不同(因事务B在中间插入/删除了符合条件的行)
  • 4种隔离级别(从低到高,性能递减,隔离性递增)
    • READ UNCOMMITTED(读未提交)
      • 问题:允许脏读、不可重复读、幻读
      • 应用场景:几乎无生产应用
    • READ COMMITTED(读已提交)
      • 解决:脏读
      • 问题:允许不可重复读、幻读
      • 应用场景:Oracle/PostgreSQL默认级别
    • REPEATABLE READ(可重复读)
      • 解决:脏读、不可重复读
      • 问题:理论存在幻读,MySQL InnoDB引擎通过
      • 应用场景:MySQL InnoDB默认级别
    • SERIALIZABLE(串行化)
      • 解决:所有并发问题
      • 实现:强制事务串行执行(每个事务加表级读锁)
      • 应用场景:对数据一致性要求极高,并发量极低的场景
  • 隔离级别设置与查询
    • 设置语法
      • 设置当前会话:SET SESSION TRANSACTION ISOLATION LEVEL 级别;
      • 设置全局:SET GLOBAL TRANSACTION ISOLATION LEVEL 级别;
    • 查询语法
      • 查询当前会话:SELECT @@tx_isolation; / SELECT @@transaction_isolation;(MySQL 8.0+)
      • 查询全局:SELECT @@global.tx_isolation; / SELECT @@global.transaction_isolation;(MySQL 8.0+)