HarshitJK/Cybersecurity-Incident-Response-Database
GitHub: HarshitJK/Cybersecurity-Incident-Response-Database
一个基于Node.js和MySQL的全栈安全事件管理系统,演示了如何在应用层和数据库层实现细粒度的基于角色的访问控制。
Stars: 0 | Forks: 0
# 🛡️ SOC Shield — 网络安全事件响应数据库
一个基于 Node.js、Express 和 MySQL 构建的全栈 **安全运营中心 (SOC)** 事件管理系统。该项目模拟了真实 SOC 如何实施 **基于 SQL 的访问控制**,其中每一个数据库操作都受到角色权限的限制 —— 就像 SQL 中的 `GRANT` 和 `REVOKE` 一样。
## 🖼️ 预览
| 登录页面 | 仪表盘 | RBAC 权限 |
|---|---|---|
| *赛博朋克风格暗色登录页,带快速演示按钮* | *统计、图表、近期事件* | *每个角色的 SQL GRANT 矩阵* |
## ✨ 功能特性
- 🔐 **SQL RBAC** — 权限存储在 `RolePermissions` 表中,映射 SQL `GRANT` 语句
- 👥 **4 种角色** — Admin(管理员)、SOC Manager(SOC 经理)、Security Analyst(安全分析师)、Auditor(审计员)
- 🚨 **事件管理** — 完整的 CRUD 操作,支持严重程度颜色编码(Critical → Low)
- 🧠 **威胁报告** — 分析师提交包含丰富 IOC 的调查报告
- 📜 **审计日志** — 每一个操作(包括被拒绝的尝试)都会记录 IP 和时间戳
- 🖥️ **系统清单** — 追踪受监控资产及其受损状态
- 📊 **实时仪表盘** — 通过 Chart.js 展示圆环图和柱状图,带有动态统计计数器
- 🎨 **赛博朋克暗色主题** — 霓虹青/绿色,发光图标,闪烁的 DEFCON 指示器
## 🗄️ 数据库架构
```
Roles — role_id, role_name, description
Users — user_id, name, email, password (bcrypt), role_id
Incidents — incident_id, title, description, severity, status, reported_by, assigned_to
Systems — system_id, system_name, ip_address, owner, status
ThreatReports — report_id, incident_id, analyst_id, report_text, findings, ioc_data
AccessLogs — log_id, user_id, action, resource, status, ip_address, timestamp
RolePermissions — role_name, resource, action ← Core RBAC table
```
## 🔒 SQL RBAC — 工作原理
权限存储在 `RolePermissions` 表中,并在每次 API 调用前于中间件层进行检查。这映射了真实的 SQL `GRANT`/`REVOKE` 语义:
```
-- Admin: Full access
GRANT SELECT, INSERT, UPDATE, DELETE ON incidents TO admin;
-- SOC Manager: View + assign
GRANT SELECT, INSERT, UPDATE ON incidents TO soc_manager;
-- Security Analyst: View assigned + submit reports
GRANT SELECT, UPDATE ON incidents TO security_analyst;
GRANT SELECT, INSERT ON threat_reports TO security_analyst;
-- Auditor: Read-only
GRANT SELECT ON incidents TO auditor;
GRANT SELECT ON access_logs TO auditor;
```
当某个角色缺少权限时,服务器返回结构化的 **Access Denied**(访问拒绝)响应:
```
{
"error": "Access Denied: Role 'auditor' does not have UPDATE permission on 'incidents'.",
"rbac_info": {
"role": "auditor",
"resource": "incidents",
"action": "UPDATE",
"sql_equivalent": "REVOKE UPDATE ON incidents FROM auditor;"
}
}
```
## 🎭 演示账户
| 角色 | 邮箱 | 密码 | 访问级别 |
|------|-------|----------|--------------|
| **Admin** | admin@soc.com | admin123 | 对所有资源拥有完整的 CRUD 权限 |
| **SOC Manager** | manager@soc.com | manager123 | 分配分析师,查看所有内容 |
| **Security Analyst** | analyst@soc.com | analyst123 | 仅限被分配的事件 |
| **Auditor** | auditor@soc.com | auditor123 | 只读,无写入权限 |
## 🚀 设置与运行
### 前置条件
- [Node.js](https://nodejs.org) v16+
- [MySQL](https://dev.mysql.com/downloads/) 8.0+
### 1. 克隆仓库
```
git clone https://github.com/HarshitJK/Cybersecurity-Incident-Response-Database.git
cd Cybersecurity-Incident-Response-Database
```
### 2. 配置环境
```
cp .env.example .env
```
编辑 `.env` 并设置你的 MySQL 凭证:
```
DB_USER=root
DB_PASSWORD=your_mysql_password
```
### 3. 安装依赖
```
npm install
```
### 4. 初始化数据库
```
node database/seed.js
```
这将创建所有表,插入演示数据,并设置 RBAC 权限矩阵。
### 5. 启动服务器
```
node server.js
```
### 6. 打开应用
```
http://localhost:3000
```
## 📁 项目结构
```
soc-shield/
├── server.js # Express entry point
├── .env.example # Environment template
├── database/
│ ├── schema.sql # CREATE TABLE + GRANT statements
│ ├── seed.js # Demo data seeder
│ └── db.js # MySQL connection pool
├── middleware/
│ └── auth.js # RBAC enforcement + access logging
├── routes/
│ ├── auth.js # Login / logout
│ ├── incidents.js # Incident CRUD
│ ├── users.js # User management
│ ├── reports.js # Threat reports
│ ├── logs.js # Audit logs
│ └── systems.js # Systems inventory
└── public/
├── index.html # SPA shell
├── css/style.css # Cyberpunk dark theme
└── js/app.js # Frontend logic
```
## 🛠️ 技术栈
| 层级 | 技术 |
|-------|------------|
| 前端 | HTML5 · 原生 CSS · 原生 JavaScript |
| 图表 | [Chart.js](https://chartjs.org) 4.4 |
| 后端 | Node.js · Express.js |
| 认证 | express-session · bcryptjs |
| 数据库 | MySQL 8.0 |
| 数据库驱动 | mysql2 (原生 SQL — 无 ORM) |
## 📖 RBAC 演示场景
1. **分析师更新状态** — 使用 `analyst@soc.com` 登录,编辑一个被分配的事件,更改状态 → ✅ 允许
2. **审计员写入被阻止** — 使用 `auditor@soc.com` 登录,尝试任何编辑操作 → ❌ Access Denied(已记录)
3. **经理分配分析师** — 使用 `manager@soc.com` 登录,将事件分配给分析师 → ✅ 允许
4. **管理员创建用户** — 使用 `admin@soc.com` 登录,进入用户管理,创建新账户 → ✅ 允许
*为 DBMS 迷你项目制作 — SQL 基于角色的访问控制与数据库安全*
标签:Chart.js, Express, GNU通用公共许可证, GPT, HTTP工具, IOC, MITM代理, Node.js, RBAC, SQL权限控制, Web安全, 基于角色的访问控制, 威胁情报, 安全仪表盘, 安全管理系统, 安全运营中心, 审计日志, 工单系统, 开发者工具, 漏洞管理, 网络安全, 网络安全审计, 网络映射, 网络研究, 自定义脚本, 蓝队分析, 资产盘点, 赛博朋克, 隐私保护