云计算百科
云计算领域专业知识百科平台

新手勇闯网络安全 | MySQL基础(一)

学完 Python 自动化,我们进入数据库安全方向。SQL 注入是 Web 安全中最经典的漏洞,而理解 SQL 注入的前提,是先掌握数据库本身。这一篇从 MySQL 基础开始:数据库与 DBMS 的概念、表/记录/字段等基础对象、命令行连接、SQL 四大分类、CRUD 增删改查和 UNION 联合查询。掌握这些查询能力,后续理解注入原理和数据枚举就是水到渠成的事。


一、数据库基本概念

1.1 什么是数据库

数据库(Database)是按照一定结构组织、存储和管理数据的集合,用于高效保存、查询、修改和维护大量数据。可以形象地比喻为一座大型图书馆:书籍是数据记录,分类编号是索引,图书管理员就是数据库管理系统(DBMS)。

为什么需要数据库:与 Excel 或文本文件相比,数据库更适合存储大量数据、多人同时访问、按条件快速检索、保证数据一致性,以及进行权限管理和审计。

1.2 什么是 DBMS【重点】

数据库本身只是数据的集合,而真正负责"创建数据库、管理用户、执行 SQL、控制权限、存储数据、返回查询结果"的软件,叫做 DBMS(Database Management System,数据库管理系统)。

没有 DBMS,就无法完成:创建库表、读写数据、权限管控、事务并发、备份恢复。

1.3 常见 DBMS

DBMS特点常见场景
MySQL 开源、免费、轻量、资料多、上手快 网站、CMS、教务系统、论坛、电商
SQL Server / MSSQL 微软开发,与微软生态深度集成 Windows 生态、部分政企内网系统
Oracle 功能强、体系重、运维成本高 银行、运营商、大型传统企业
PostgreSQL 开源能力强、标准兼容性好 中大型业务、GIS、数据平台
SQLite 轻量级嵌入式数据库,无需独立服务 单机程序、移动端、本地缓存

国产数据库:达梦(DM)、OceanBase、PolarDB、TiDB、GaussDB、人大金仓等,常见于政企、信创替代、金融级业务等场景。

本课只学习关系型数据库,非关系型(Redis、MongoDB)不涉及。

1.4 为什么用 MySQL

  • 使用范围广,中小型 Web 应用、靶场全覆盖
  • 上手门槛低,phpStudy 一键部署
  • information_schema 元数据结构清晰,适合数据库结构枚举教学
  • MySQL 不是唯一需要掌握的数据库,但是数据库安全学习的最优入门数据库。


    二、数据库基础对象【重点】

    对象说明一句话理解
    表(Table) 由行和列组成的二维结构,用于存储结构化数据 同类数据的存储结构
    记录(Record/Row) 表格中的每一行,代表一个独立的数据实例 表内单行数据
    字段(Field/Column) 表格中的每一列,定义数据的属性类型 表内单列属性
    主键(Primary Key) 唯一标识表中每一条记录,必须唯一且不可为空 定位单行
    外键(Foreign Key) 建立并强制两个表之间链接的字段 多表关联纽带
    索引(Index) 加速查询的特殊数据结构,类似书籍目录 提速查询

    主键不能重复、不能为 NULL;外键如 students.class_id 关联 classes.class_id;索引不改变原始数据。三者核心作用:主键=定位单行、外键=表关联、索引=提速查询。


    三、环境搭建与连接 MySQL

    3.1 测试环境

    • 集成环境:phpStudy 中的 MySQL 5.7
    • 连接方式:Navicat + mysql 命令行
    • MySQL 默认端口:3306
    • 默认管理员账号:root

    本课以 MySQL 5.7 为准,个别函数和系统表在 MySQL 8.0 中存在差异(8.0 移除 password 字段、information_schema 部分表字段变更),后续注入靶场优先选用 5.7。

    3.2 图形化连接工具

    Navicat 是最流行的商业数据库管理工具之一。核心原理:所有图形化点击操作,底层都会转化为原生 SQL 语句【重点】。

    3.3 命令行连接【实操必考】

    # 连接本地 MySQL,默认端口 3306
    mysql -u root -p

    # 连接指定 IP 和端口
    mysql -h 127.0.0.1 -P 3306 -u root -p

    易错坑:端口参数是大写 -P,小写 -p 代表密码。

    若提示"mysql 不是内部命令",需将 phpStudy 的 mysql/bin 目录加入系统环境变量 PATH。

    3.4 连接后高频内置命令

    — 查看当前 MySQL 服务器上所有的数据库
    SHOW DATABASES;

    — 切换到名为 mysql 的数据库
    USE mysql;

    — 查看当前数据库里所有的表
    SHOW TABLES;

    — 查看当前正在使用哪个数据库
    SELECT DATABASE();

    — 退出 MySQL 命令行
    EXIT;

    3.5 易错点

  • SQL 语句必须以英文分号 ; 结尾,不加分号会进入多行等待模式
  • mysql -p 后禁止加空格和明文密码,会报错且明文留存日志
  • 命令行密码输入无回显,属于正常安全机制,不是输入故障

  • 四、SQL 基础

    4.1 SQL 是什么

    SQL(Structured Query Language,结构化查询语言)是关系型数据库通用的交互标准,所有数据库交互行为都依靠 SQL。它是人与数据库交互的"通用钥匙"。

    网安底层逻辑:所有 SQL 注入漏洞,本质都是可控用户输入拼接篡改了原生 SQL 语句。图形化工具底层执行逻辑仍是 SQL 语句。

    4.2 SQL 四大分类

    分类全称关键字作用
    DDL 数据定义语言 CREATE、ALTER、DROP 操作库表结构,不操作数据
    DML 数据操作语言 INSERT、UPDATE、DELETE 操作表内单行数据
    DQL 数据查询语言 SELECT 数据筛选读取,注入使用频率最高
    DCL 数据控制语言 GRANT、REVOKE 权限管控

    记忆口诀:DDL 改结构、DML 改数据、DQL 查数据、DCL 控权限。


    五、DDL:库表结构操作

    5.1 创建数据库与表

    — 创建数据库(不存在才创建,指定字符集)
    CREATE DATABASE IF NOT EXISTS school CHARACTER SET utf8 COLLATE utf8_general_ci;

    — 使用数据库
    USE school;

    — 创建数据表:主键自增 + 字符串字段
    CREATE TABLE students (
    student_id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    real_name VARCHAR(50) NOT NULL,
    age INT NOT NULL
    );

    核心知识点:

    • PRIMARY KEY(主键):唯一标识行数据,确保无重复且非空
    • AUTO_INCREMENT(自增):自动分配唯一数字 ID,无需手动输入
    • VARCHAR(50):字符串类型,最多容纳 50 个字符
    • NOT NULL:该字段不允许为空

    5.2 删除表与数据库

    — 删除数据表
    DROP TABLE IF EXISTS students;

    — 删除数据库
    DROP DATABASE IF EXISTS school;

    CREATE 用于创建对象,DROP 用于删除对象。这些语句操作的是"数据库对象",不是表中的具体某一行数据。


    六、DML:数据增删改

    6.1 INSERT 数据新增

    — 单条插入:字段顺序、值顺序一一对应
    INSERT INTO students(username, real_name, gender, age, phone, class_id)
    VALUES('sunqi', '孙七', '男', 20, '13800000005', 2);

    — 批量插入
    INSERT INTO students(username, real_name, gender, age, phone, class_id)
    VALUES
    ('zhouba', '周八', '女', 19, '13800000006', 1),
    ('wujiu', '吴九', '男', 22, '13800000007', 3);

    注意事项:字段与值的顺序和数量必须一一对应;字符串值需用单引号 ' 包裹,数值则无需。

    6.2 UPDATE 数据修改

    UPDATE students
    SET phone = '13900000001'
    WHERE student_id = 1;

    重要知识点:UPDATE 必须配合 WHERE 使用;没有 WHERE 会修改整张表的数据,导致严重后果!

    6.3 DELETE 数据删除

    DELETE FROM students WHERE student_id = 4;

    重要知识点:DELETE 也建议始终配合 WHERE;没有 WHERE 会删除整张表的所有记录且不可撤回。


    七、DQL:数据查询【重点】

    SELECT 是最核心的查询语句,后续大部分信息获取和枚举动作,本质上都依赖查询能力。

    7.1 基本查询

    — 查询全部字段
    SELECT * FROM students;

    — 查询指定字段
    SELECT username, real_name, phone FROM students;

    — 去重查询:过滤重复的班级 ID
    SELECT DISTINCT class_id FROM students;

    7.2 排序查询

    — 按年龄降序排列(DESC 降序,ASC 升序为默认)
    SELECT * FROM students ORDER BY age DESC;

    7.3 限制数量

    — 仅返回前 3 条
    SELECT * FROM students LIMIT 0, 3;

    — 从第 2 条开始返回 5 条(分页场景:offset, size)
    SELECT * FROM students LIMIT 1, 5;


    八、UNION 联合查询

    UNION 用于把两个或多个 SELECT 查询结果合并到一起。

    — 基本语法
    SELECT 字段列表 FROM 表1
    UNION
    SELECT 字段列表 FROM 表2;

    示例:合并两个班级的查询结果

    SELECT real_name FROM students WHERE class_id = 1
    UNION
    SELECT real_name FROM students WHERE class_id = 2;

    UNION 与 UNION ALL 的区别:

    关键字行为特点
    UNION 合并结果并自动去重 结果唯一,但多一次去重开销
    UNION ALL 合并结果不去重 保留全部行,执行效率更高

    关键使用要求:

  • 参与合并的多条 SELECT 语句返回的列数必须完全一致
  • 对应位置字段的数据类型应尽量兼容

  • 九、易错点总结

    易错点正确做法
    语句结尾漏分号 多数 SQL 语句结尾需要加英文 ;,不加会进入多行等待模式
    命令行密码带空格 mysql -p 后禁止加空格和明文密码,回车后输入无回显
    注释符使用错误 单行注释 — 后必须加空格;# 也可作行注释;/* */ 多行注释
    字符串遗漏引号 字符串值必须用英文单引号 ' 包裹,忘记闭合会语法错误
    UPDATE/DELETE 忘写 WHERE 忘写 WHERE 会修改或删除整张表,是典型事故点

    十、知识小结

    知识模块核心内容一句话速记
    数据库 按结构组织、存储、管理数据的集合 大型图书馆
    DBMS 创建库表、执行 SQL、控制权限的软件 图书管理员
    基础对象 表/记录/字段/主键/外键/索引 主键定位、外键关联、索引提速
    连接方式 Navicat 图形化 + mysql 命令行 图形化底层也是 SQL
    SQL 分类 DDL/DML/DQL/DCL 改结构/改数据/查数据/控权限
    INSERT 单条/批量插入,值用单引号 字段值一一对应
    UPDATE SET + WHERE 忘写 WHERE 全表被改
    DELETE DELETE FROM + WHERE 忘写 WHERE 全表被删
    SELECT * / 指定字段 / DISTINCT / ORDER BY / LIMIT 查询能力是后续基础
    UNION 合并结果集,UNION 去重、UNION ALL 不去重 列数必须一致

    合规声明:本课所有 SQL 操作均在本地 phpStudy 的 MySQL 环境中执行,仅用于学习目的。严禁在未授权的数据库上执行任何 SQL 操作。


    从数据库概念到 CRUD 操作,从 SELECT 查询到 UNION 联合查询,MySQL 基础是数据库安全的起点。记住:查询(DQL)能力决定了后续信息获取的能力,权限控制(DCL)决定了账号能做什么,information_schema 是数据库结构枚举的关键入口。下一篇将进入条件 SQL 与 SQL 注入原理——用户的输入为什么会改变 SQL 语句的原意。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 新手勇闯网络安全 | MySQL基础(一)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!