TypeScript + MySQL 数据库安全编程教学项目,涵盖 SQL 注入、参数化查询、ORM 框架、事务处理等核心概念。
本项目包含多个独立的演示程序,用于教学数据库编程中的安全问题、最佳实践和现代 ORM 框架的使用:
pnpm install
# 或
npm install
在项目根目录创建 .env 文件:
DB_HOST=127.0.0.1 DB_USER=root DB_PASSWORD=你的密码 DB_NAME=LearnDB
CREATE DATABASE IF NOT EXISTS LearnDB;
USE LearnDB;
-- 学生表(用于数据生成演示)
CREATE TABLE students (
student_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(100),
age INT,
major VARCHAR(50),
gpa DECIMAL(3,2),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 用户表(用于登录和 ORM 演示)
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL,
role VARCHAR(20) DEFAULT 'user',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 账户表(用于事务演示)
CREATE TABLE accounts (
id INT PRIMARY KEY AUTO_INCREMENT,
account_name VARCHAR(50) UNIQUE NOT NULL,
balance DECIMAL(10,2) DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
生成 10 万条随机学生数据到 students 表:
pnpm insertData
功能特点:
⚠️ 警告:此程序故意包含 SQL 注入漏洞,仅用于教学!
pnpm sql-injection
演示内容:
admin' OR '1'='1)使用参数化查询和简单 ORM 模式防止 SQL 注入:
pnpm safe-orm
演示内容:
使用 TypeORM 企业级 ORM 框架:
pnpm typeorm
演示内容:
演示数据库事务的 ACID 特性:
pnpm transaction
演示内容:
insertData 了解数据库基本操作sql-injection 了解 SQL 注入危害safe-orm 学习防护方法typeorm 学习现代 ORMtransaction 理解事务机制sqlInjection.ts 仅用于教学,切勿用于生产环境MIT |------------|------|-------|-----|-------|-----| | 1 | 李伟强 | user0_a3b2c1@qq.com | 20 | 计算机科学 | 3.75 | | 2 | 王静 | user1_d4e5f6@163.com | 21 | 软件工程 | 3.50 | | 3 | 张明华 | user2_g7h8i9@gmail.com | 19 | 数据科学 | 3.85 |
在 src/index.ts 中修改:
const TOTAL_RECORDS = 50000; // 改为5万条
在 src/index.ts 开头修改:
const DB_CONFIG = {
host: 'localhost',
user: 'your_username',
password: 'your_password',
database: 'your_database'
};
⚠️ 运行前确保:
LearnDB 已创建students 结构已创建⚠️ 数据清理:程序运行时会自动清空 students 表的现有数据(TRUNCATE)
❌ 数据库连接失败: Error: connect ECONNREFUSED
解决:检查 MySQL 服务是否启动,配置是否正确
❌ 插入数据出错: Error: Table 'LearnDB.students' doesn't exist
解决:先执行上述 SQL 创建表
❌ Error: Access denied for user
解决:检查数据库用户权限,确保有 INSERT、TRUNCATE 权限
mysql2:MySQL 客户端库,支持 Promisetypescript:TypeScript 编译器ts-node:直接运行 TypeScript 文件@types/node:Node.js 类型定义MIT