数据库(一)

0 阅读5分钟

【网安学习】数据库基础概念笔记与心得

一、学习背景与目标

学习背景:0基础学习。

目标:会操作基本数据库连接,库、表的创建;掌握CRUD(增删改查),必须掌握“查”。

二、核心知识点笔记

2.1 基础概念

数据库官方定义:

数据库是长期存储在计算机内、有组织、可共享的数据集合,解决海量数据管理问题\color{red}{数据库是长期存储在计算机内、有组织、可共享的数据集合,解决海量数据管理问题} (对比Excel:支持上亿条数据、多人同时操作且保证数据不混乱)\color{red}{(对比Excel:支持上亿条数据、多人同时操作且保证数据不混乱)}

通俗化解释(人话版):网络世界的图书馆。
数据库层级结构:
数据库层级图书馆类比对象技术层面示例核心作用
顶层:数据库整座图书馆library_db(数据库名)承载所有图书相关数据,是数据的总仓库
中层:数据表图书馆不同功能区(文学区/科技区/教辅区)book表(图书信息)、reader表(读者信息)、borrow表(借阅记录)按业务维度分类存储数据,每个表对应一类核心业务
底层:字段+数据图书卡片的属性+具体信息字段:book_id(图书编号)、book_name(书名)、author(作者)
数据:9787020161762红楼梦曹雪芹
字段定义数据的属性,数据是具体的业务值
数据库管理系统(DBMS):

数据库的“管家”,负责管理数据访问、存储规则,常⻅类型:

  1. Oracle:功能强、收费,银⾏/电信常⽤;
  2. SQL Server:适配Windows,政府单位常⽤;
  3. MySQL(重点):开源免费、轻巧,校园系统/⽹站主流

2.2 原理拆解

基本技术点:
1.数据库连接操作
(1)Navicat可视化连接
  1. 打开Navicat左上角「连接」选择「MySQL」;
  2. 填写核心信息;
  3. 点击「测试连接」,提示“连接成功”即完成;
  4. 双击连接名,即可查看/操作数据库。
(2)命令行连接

核心指令(CMD执行,非MySQL交互界面):
mysql -u root -p
连接成功后

图片.png

2.数据库与表的创建
(1)创建school数据库


方式1:Navicat可视化:右键新建的MySQL连接 → 「新建数据库」→ 填写
方式2:命令行CREATE DATABASE school CHARACTER SET utf8 COLLATE utf8_general_ci;

(2)创建users学生表(存储账号密码)


方式1:Navicat可视化

  1. 双击school数据库右键「表」>「新建表」;
  2. 添加字段;
  3. 保存表,命名为users。


方式2:命令行

图片.png

最终效果图 图片.png

关键技术点:R\color{red}{R}必掌握
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(条件)
4.R(Read):查询数据(SELECT,攻击者偷数据核心)\color{red}{4. R (Read):查询数据 (SELECT,攻击者偷数据核心)}


(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;
(测有几列存在)

拓展:PHP与数据库交互\color{red}{拓展:PHP 与数据库交互}
SQL注入漏洞(万能密码)核心原理
1.漏洞根源

核⼼问题代码:$sql = "SELECT * FROM users WHERE name='$name' AND password='$pwd'";

  • 直接将⽤户输⼊的 name/name / pwd 拼接到SQL语句的单引号中执⾏;
  • 未检查/过滤特殊字符(如 ' 、 OR 、 # 等),也未做转义处理;
  • 系统默认⽤户输⼊“正常内容”,但攻击者可输⼊恶意字符篡改SQL逻辑。
2.万能密码底层逻辑

攻击者输⼊123' or '1'='1这类特殊字符,实现3个关键操作:

  1. 闭合原有SQL语句的单引号,打破查询限制;
  2. 添加 '1'='1' 这类恒成⽴条件,让查询条件永远为真;
  3. 注释多余内容,避免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)

图片.png

2. U (Update):修改数据 (UPDATE)

图片.png

3. D (Delete):删除数据 (DELETE)

图片.png

4.R(Read):查询数据(SELECT,攻击者偷数据核心)\color{red}{4. R (Read):查询数据 (SELECT,攻击者偷数据核心)}


(1)查询所有数据

图片.png
(2)按条件查询

图片.png
(3)多条件查询
and

图片.png
or

图片.png
(4)模糊查询(LIKE+%)
%

图片.png
_

图片.png
(5)排序查询(ORDER BY)
按id排

图片.png
按name降序

图片.png
(6)联合查询(UNION,SQL注入核心)

图片.png

拓展:PHP与数据库交互实操复现\color{red}{拓展:PHP 与数据库交互实操复现}

环境准备:Navicat Premium 17、phpStudy 2018、Trae、浏览器
关键配置:先开启phpStudy 2018
操作步骤:
1.构建靶场:

图片.png

2.输入123' or '1'='1

图片.png

3.其他输入
123' or '1=1

原理:和123' or '1'='1一样,只不过这个是字符=字符;而123' or '1=1是数字=数字。 图片.png

123' or '1=1' -- +

原理:和123' or '1'='1大部分一样;因为123' or '1=1' -- +多了一个',所以要加注释-- +图片.png

123' or 1=1 limit 1,1 -- -

原理:和123' or '1'='1基本一样;因为123' or 1=1 limit 1,1 -- -多了limit 1,1所以会指向数据表的第二个用户;又因为执行的时候会多',所以加注释-- -让它失效。 图片.png

三、个人学习心得

3.1 学习过程复盘

投入时长 & 节奏:每日学习时长、难点耗时
学习方法:记笔记、实操、刷题、交流的组合方式

3.2 收获与成长

知识收获:掌握的原理、技术、工具
能力提升:实操能力、排错能力、攻防思维
认知改变:对网安行业 / 技术的新理解

3.3 不足与改进计划

不足
未掌握的难点:卡壳的知识点、未复现的场景、防御加固的思考太少
学习短板:基础薄弱、实操不足、思维局限
时间问题:学习效率、没有时间规划
改进计划
针对短板的弥补方案:补基础、刷靶场、看源码
下一阶段学习目标:具体可落地的任务
学习方法优化:调整节奏、时间规划

四、总结

这次学习围绕数据库展开,涵盖核心概念(层级结构类比图书馆)、连接操作(Navicat 可视化与命令行)、库表创建(school 库与 users 表)及 SQL 核心 CRUD 操作,重点学习了查询相关语法(含联合查询等),同时拓展学习了 SQL 注入攻击相关核心要点,助力自己理解数据库基础及漏洞原理更进一步。