security_event_log.sql 6.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. -- ----------------------------
  2. -- Table structure for security_event_log
  3. -- ----------------------------
  4. -- 用途:
  5. -- 记录应用层、网关或 WAF 识别到的安全风险事件,用于追踪恶意请求、误报复盘、统计分析和后续封禁策略。
  6. -- 设计原则:
  7. -- 1. 不保存完整请求体,仅保存截断摘要和哈希,降低敏感数据落库风险。
  8. -- 2. 事件识别与事件记录解耦,应用校验、限流、网关/WAF 等检测源都可以写入本表。
  9. -- 3. 枚举值使用 varchar,便于后续扩展检测类型、处置动作和风险等级。
  10. CREATE TABLE IF NOT EXISTS `security_event_log` (
  11. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID,自增唯一标识一条安全事件记录',
  12. `event_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '安全事件类型,例如 SQL_INJECTION、XSS、INVALID_JSON、INVALID_PARAMETER、WAF_BLOCK、RATE_LIMIT',
  13. `risk_level` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'LOW' COMMENT '风险等级:LOW-低风险,MEDIUM-中风险,HIGH-高风险,CRITICAL-严重风险',
  14. `detector` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '检测来源:APP_VALIDATION-应用参数校验,APP_RULE-应用安全规则,WAF-WAF网关,GATEWAY-网关,RATE_LIMIT-限流组件,MANUAL-人工标记',
  15. `rule_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '命中的检测规则编号或规则名称,例如 mapper-order-field-whitelist、waf-942100;无明确规则时可为空',
  16. `event_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '安全事件简要描述,用于列表展示和人工快速判断事件原因',
  17. `request_uri` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求路径,不包含协议、域名和查询字符串,例如 /applet/v1/homePage/getStationInfoPage',
  18. `request_method` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'HTTP请求方法,例如 GET、POST、PUT、DELETE',
  19. `query_string` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'URL查询字符串摘要,超过字段长度应在写入前截断;用于定位GET参数风险',
  20. `client_ip` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户端IP地址,支持IPv4和IPv6;通常取系统解析后的真实访问IP',
  21. `x_forwarded_for` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'X-Forwarded-For请求头原始摘要,用于排查代理链路;超过字段长度应在写入前截断',
  22. `user_agent` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'User-Agent请求头摘要,用于识别浏览器、脚本工具或扫描器',
  23. `referer` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Referer请求头摘要,用于分析请求来源页面;可能为空',
  24. `user_id` bigint(20) NULL DEFAULT NULL COMMENT '平台用户ID;未登录、无法解析或第三方请求无平台用户时为空',
  25. `operator_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '第三方运营商ID或渠道方标识;非第三方请求可为空',
  26. `request_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求追踪ID,例如网关TraceId、日志MDC TraceId或业务生成的请求序列号,用于关联应用日志',
  27. `matched_field` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '命中风险的字段名或参数名,例如 latitude、sortType、orderBy;无法定位字段时为空',
  28. `payload_excerpt` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '命中风险的请求内容摘要,仅保存截断片段,不保存完整请求体,避免敏感数据长期落库',
  29. `payload_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '命中内容的SHA-256哈希值,便于去重、关联同类攻击和追踪重复扫描行为',
  30. `action` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'OBSERVE' COMMENT '处置动作:OBSERVE-仅记录,REJECT-拒绝请求,BLOCK-阻断请求,RATE_LIMIT-触发限流,ALLOW-确认放行',
  31. `http_status` int(11) NULL DEFAULT NULL COMMENT '本次请求最终返回的HTTP状态码,例如 400、403、429;未进入响应阶段时可为空',
  32. `handle_result` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '处理结果说明,例如 rejected_by_validation、blocked_by_waf、record_only、false_positive',
  33. `remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注信息,用于人工复核、误报说明或补充上下文',
  34. `create_by` bigint(20) NULL DEFAULT NULL COMMENT '创建人ID;系统自动记录通常为空或为系统账号ID',
  35. `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间,即安全事件写入数据库的时间',
  36. `update_by` bigint(20) NULL DEFAULT NULL COMMENT '更新人ID;人工复核或修改事件状态时记录操作人ID',
  37. `update_time` datetime NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间,事件被人工复核、修改备注或更新处置结果时刷新',
  38. `is_deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识:0-未删除,1-已删除;用于后台列表隐藏而非物理删除',
  39. PRIMARY KEY (`id`) USING BTREE,
  40. INDEX `idx_security_event_create_time` (`create_time`) USING BTREE,
  41. INDEX `idx_security_event_type_time` (`event_type`, `create_time`) USING BTREE,
  42. INDEX `idx_security_event_risk_time` (`risk_level`, `create_time`) USING BTREE,
  43. INDEX `idx_security_event_ip_time` (`client_ip`, `create_time`) USING BTREE,
  44. INDEX `idx_security_event_request_id` (`request_id`) USING BTREE,
  45. INDEX `idx_security_event_payload_hash` (`payload_hash`) USING BTREE,
  46. INDEX `idx_security_event_action_time` (`action`, `create_time`) USING BTREE
  47. ) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '安全事件日志表' ROW_FORMAT = DYNAMIC;