前言
在数字化时代,数据库作为信息系统的核心存储组件,其安全性直接关系到整个系统的稳定运行和数据的机密性。无论是企业ERP系统、电商平台还是个人博客,几乎所有的应用都离不开数据库的支持。本文将系统性地介绍数据库的基础概念、CRUD操作以及相关的安全基础知识,帮助初学者构建数据库安全的第一道防数据库基础安全:从零开始线。
一、数据库基础概念
1.什么是数据库?
数据库(Database)是按照特定结构组织、存储和管理数据的仓库。想象一下图书馆的管理系统:成千上万的书籍需要被分类、编号、存储,并能快速被读者查询到。数据库就是这样一个电子化的"图书馆管理系统",但存储的不是书籍,而是各种类型的数据。
2.DBMS:数据库的管理者
DBMS(Database Management System,数据库管理系统)是操纵和管理数据库的软件系统。常见的DBMS有:
-
MySQL:开源关系型数据库,广泛应用
-
Oracle:企业级大型数据库系统
-
SQL Server:微软开发的关系型数据库
-
PostgreSQL:功能强大的开源数据库
-
MongoDB:非关系型文档数据库
DBMS负责数据库的创建、查询、更新和维护,同时提供数据安全、并发控制等功能。
3.数据库的层次结构
数据库系统通常包含以下几个层次:
物理层:数据在磁盘上的实际存储方式
逻辑层:数据库管理员和开发人员看到的数据结构
视图层:最终用户看到的数据呈现方式
二、数据库的CRUD操作
1.CRUD是什么?
CRUD代表数据库的四种基本操作:
-
Create(创建):向数据库添加新数据
-
Read(读取):从数据库查询数据
-
Update(更新):修改数据库中现有数据
-
Delete(删除):从数据库移除数据
2.创建数据库
步骤1:安装数据库管理系统
以MySQL为例,可以从官网下载并安装MySQL Community Server。
步骤2:创建数据库
— 初始化公司数据库
CREATE DATABASE company_db;
— 切换到目标数据库
USE company_db;
— 建立员工信息表
CREATE TABLE employees (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
department VARCHAR(50),
salary DECIMAL(10, 2),
hire_date DATE DEFAULT CURRENT_DATE,
is_active BOOLEAN DEFAULT TRUE
);
— 建立系统用户表
CREATE TABLE users (
user_id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last_login TIMESTAMP NULL,
login_attempts INT DEFAULT 0,
account_locked BOOLEAN DEFAULT FALSE
);
三、SQL语言基础
1.SQL简介
SQL(Structured Query Language,结构化查询语言)是与数据库交互的标准语言。它分为几个主要部分:
DDL(数据定义语言):定义数据结构
-
CREATE:创建数据库对象
-
ALTER:修改数据库对象
-
DROP:删除数据库对象
DML(数据操纵语言):操作数据
-
SELECT:查询数据
-
INSERT:插入数据
-
UPDATE:更新数据
-
DELETE:删除数据
DCL(数据控制语言):控制访问权限
-
GRANT:授予权限
-
REVOKE:撤销权限
2.数据的CRUD操作实战
创建数据(C)
— 新增员工信息记录
INSERT INTO employees (name, email, department, salary)
VALUES
('张三', 'zhangsan@example.com', '技术部', 15000.00),
('李四', 'lisi@example.com', '市场部', 12000.00),
('王五', 'wangwu@example.com', '人力资源部', 10000.00);
— 添加用户账号信息(重要提示:生产环境必须对密码进行加密处理)
INSERT INTO users (username, password_hash, email)
VALUES
('admin', '$2y$10$ExampleHashValue', 'admin@example.com');
读取数据(R)
— 查询所有员工
SELECT * FROM employees;
— 查询特定部门的员工
SELECT name, email, salary FROM employees
WHERE department = '技术部';
— 按薪资排序
SELECT name, department, salary FROM employees
ORDER BY salary DESC;
— 统计各部门平均薪资
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department;
更新数据(U)
— 技术部员工薪资调整
UPDATE employees
SET salary = salary * 1.1
WHERE department = '技术部';
— 停用2020年前入职的老员工账号
UPDATE employees
SET is_active = FALSE
WHERE hire_date < '2020-01-01';
— 重置管理员登录状态
UPDATE users
SET last_login = CURRENT_TIMESTAMP,
login_attempts = 0
WHERE username = 'admin';
删除数据(D)
— 删除非活跃员工记录(操作前请确认)
DELETE FROM employees
WHERE is_active = FALSE;
— 清空整张员工表(高危操作,慎用!)
— DELETE FROM employees;
— 推荐方案:采用软删除方式
— 1. 添加删除标记字段
ALTER TABLE employees
ADD COLUMN is_deleted BOOLEAN DEFAULT FALSE;
— 2. 标记指定记录为已删除
UPDATE employees
SET is_deleted = TRUE
WHERE id = 5;
— 3. 查询有效数据(自动过滤已删除记录)
SELECT * FROM employees
WHERE is_deleted = FALSE;






