【网安学习】数据库基础概念笔记与心得
一、学习背景与目标
学习背景:0基础学习。
目标:会操作基本数据库连接,库、表的创建;掌握CRUD(增删改查),必须掌握“查”。
二、核心知识点笔记
2.1 基础概念
数据库官方定义:
通俗化解释(人话版):网络世界的图书馆。
数据库层级结构:
| 数据库层级 | 图书馆类比对象 | 技术层面示例 | 核心作用 |
|---|---|---|---|
| 顶层:数据库 | 整座图书馆 | library_db(数据库名) | 承载所有图书相关数据,是数据的总仓库 |
| 中层:数据表 | 图书馆不同功能区(文学区/科技区/教辅区) | book表(图书信息)、reader表(读者信息)、borrow表(借阅记录) | 按业务维度分类存储数据,每个表对应一类核心业务 |
| 底层:字段+数据 | 图书卡片的属性+具体信息 | 字段:book_id(图书编号)、book_name(书名)、author(作者)数据: 9787020161762、红楼梦、曹雪芹 | 字段定义数据的属性,数据是具体的业务值 |
数据库管理系统(DBMS):
数据库的“管家”,负责管理数据访问、存储规则,常⻅类型:
- Oracle:功能强、收费,银⾏/电信常⽤;
- SQL Server:适配Windows,政府单位常⽤;
- MySQL(重点):开源免费、轻巧,校园系统/⽹站主流
2.2 原理拆解
基本技术点:
1.数据库连接操作
(1)Navicat可视化连接
- 打开Navicat左上角「连接」选择「MySQL」;
- 填写核心信息;
- 点击「测试连接」,提示“连接成功”即完成;
- 双击连接名,即可查看/操作数据库。
(2)命令行连接
核心指令(CMD执行,非MySQL交互界面): mysql -u root -p
连接成功后
2.数据库与表的创建
(1)创建school数据库
方式1:Navicat可视化:右键新建的MySQL连接 → 「新建数据库」→ 填写
方式2:命令行:CREATE DATABASE school CHARACTER SET utf8 COLLATE utf8_general_ci;
(2)创建users学生表(存储账号密码)
方式1:Navicat可视化
- 双击school数据库右键「表」>「新建表」;
- 添加字段;
- 保存表,命名为users。
方式2:命令行
最终效果图
关键技术点:必掌握
SQL核心操作:CRUD(增删改查)
1. C (Create):新增数据 (INSERT INTO)
INSERT INTO school.users (id,name,id_card,phone,address,password) VALUES (3,'shiro','123456789','123456789','中国','123456')
- INSERT INTO 库名.表名 (字段1,字段2) VALUES (值1,值2)
2. U (Update):修改数据 (UPDATE)
UPDATE users SET password='newpass789' WHERE id=3;
- UPDATE 表名 SET 修改字段=内容 WHERE id=3(条件)
3. D (Delete):删除数据 (DELETE)
DELETE FROM users WHERE id=3;
- DELETE FROM 表名 WHERE id=3(条件)
(1)查询所有数据:
SELECT * FROM users;(*代表所有字段)
(2)按条件查询:
SELECT name,password FROM users WHERE id=1;(WHERE“条件”)
(3)多条件查询: SELECT name,password FROM users WHERE id=2 AND name='shior';(and“并”) SELECT * FROM users WHERE id=2 OR id=3;(or“或”)
(4)模糊查询(LIKE+%): SELECT * FROM users WHERE name LIKE 'z%';(%任意字符) SELECT * FROM users WHERE name LIKE 'zhi___';(_单个字符)
(5)排序查询(ORDER BY): SELECT name FROM users ORDER BY id;(按id排) SELECT name FROM users ORDER BY name DESC;(按name降序,DESC降序)
(6)联合查询(UNION,SQL注入核心): SELECT name,password FROM users UNION SELECT 1,2;
(测有几列存在)
SQL注入漏洞(万能密码)核心原理
1.漏洞根源
核⼼问题代码:$sql = "SELECT * FROM users WHERE name='$name' AND password='$pwd'";
- 直接将⽤户输⼊的 pwd 拼接到SQL语句的单引号中执⾏;
- 未检查/过滤特殊字符(如 ' 、 OR 、 # 等),也未做转义处理;
- 系统默认⽤户输⼊“正常内容”,但攻击者可输⼊恶意字符篡改SQL逻辑。
2.万能密码底层逻辑
攻击者输⼊123' or '1'='1这类特殊字符,实现3个关键操作:
- 闭合原有SQL语句的单引号,打破查询限制;
- 添加 '1'='1' 这类恒成⽴条件,让查询条件永远为真;
- 注释多余内容,避免SQL语法错误。
3.篡改后的SQL语句示例
原正常SQL: SELECT * FROM users WHERE name='admin' AND password='123' 篡改后SQL: SELECT * FROM users WHERE name='admin' AND password='123' or '1'='1'
→ ⽆论账号密码是否正确,数据库都会返回所有⽤户信息,代码判定“登录成功”,实现免密绕过,但是登录的是查询语句中查询的第⼀个⽤户。
color{red}{讲简单点:就是用户框和密码框没有过滤特殊字符,所以输入123' or '1'='1会被执行;又因为password='123',所以输入的代码就闭合了;当它执行的时候,因为有or和'1'='1'为恒成立,所以便会判断登录成功。
2.3 CRUD(增删改查)实操复现
环境准备:Navicat Premium 17、phpStudy 2018
关键配置:先开启phpStudy 2018
操作步骤:
1. C (Create):新增数据 (INSERT INTO)
2. U (Update):修改数据 (UPDATE)
3. D (Delete):删除数据 (DELETE)
(1)查询所有数据:
(2)按条件查询:
(3)多条件查询: and
or
(4)模糊查询(LIKE+%): %
_
(5)排序查询(ORDER BY):
按id排
按name降序
(6)联合查询(UNION,SQL注入核心):
环境准备:Navicat Premium 17、phpStudy 2018、Trae、浏览器
关键配置:先开启phpStudy 2018
操作步骤:
1.构建靶场:
2.输入123' or '1'='1
3.其他输入
123' or '1=1
原理:和123' or '1'='1一样,只不过这个是字符=字符;而123' or '1=1是数字=数字。
123' or '1=1' -- +
原理:和123' or '1'='1大部分一样;因为123' or '1=1' -- +多了一个',所以要加注释-- +。
123' or 1=1 limit 1,1 -- -
原理:和123' or '1'='1基本一样;因为123' or 1=1 limit 1,1 -- -多了limit 1,1所以会指向数据表的第二个用户;又因为执行的时候会多',所以加注释-- -让它失效。
三、个人学习心得
3.1 学习过程复盘
投入时长 & 节奏:每日学习时长、难点耗时
学习方法:记笔记、实操、刷题、交流的组合方式
3.2 收获与成长
知识收获:掌握的原理、技术、工具
能力提升:实操能力、排错能力、攻防思维
认知改变:对网安行业 / 技术的新理解
3.3 不足与改进计划
不足
未掌握的难点:卡壳的知识点、未复现的场景、防御加固的思考太少
学习短板:基础薄弱、实操不足、思维局限
时间问题:学习效率、没有时间规划
改进计划
针对短板的弥补方案:补基础、刷靶场、看源码
下一阶段学习目标:具体可落地的任务
学习方法优化:调整节奏、时间规划
四、总结
这次学习围绕数据库展开,涵盖核心概念(层级结构类比图书馆)、连接操作(Navicat 可视化与命令行)、库表创建(school 库与 users 表)及 SQL 核心 CRUD 操作,重点学习了查询相关语法(含联合查询等),同时拓展学习了 SQL 注入攻击相关核心要点,助力自己理解数据库基础及漏洞原理更进一步。