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安全, 基于角色的访问控制, 威胁情报, 安全仪表盘, 安全管理系统, 安全运营中心, 审计日志, 工单系统, 开发者工具, 漏洞管理, 网络安全, 网络安全审计, 网络映射, 网络研究, 自定义脚本, 蓝队分析, 资产盘点, 赛博朋克, 隐私保护