Files
csm/wiki/database.md
iven 60ee38a3c2 feat: 新增补丁管理和异常检测插件及相关功能
feat(protocol): 添加补丁管理和行为指标协议类型
feat(client): 实现补丁管理插件采集功能
feat(server): 添加补丁管理和异常检测API
feat(database): 新增补丁状态和异常检测相关表
feat(web): 添加补丁管理和异常检测前端页面
fix(security): 增强输入验证和防注入保护
refactor(auth): 重构认证检查逻辑
perf(service): 优化Windows服务恢复策略
style: 统一健康评分显示样式
docs: 更新知识库文档
2026-04-11 15:59:53 +08:00

2.6 KiB
Raw Blame History

Database数据库层

设计思想

SQLite 单文件数据库WAL 模式支持并发读写。设计原则:

  1. 只追加迁移 — 永不修改已有 migration 文件
  2. 参数绑定 — 所有 SQL 使用 .bind(),绝不拼接
  3. upsert 模式ON CONFLICT ... DO UPDATE 处理重复上报,必须更新 updated_at
  4. 嵌入式迁移 — SQL 文件通过 include_str! 编译进二进制,运行时按序执行
  5. 外键启用foreign_keys(true) 强制引用完整性

代码逻辑

初始化

main() → init_database() → SQLite WAL + Normal sync + 5s busy timeout + FK on
       → run_migrations() → CREATE _migrations 表 → 按序执行 001-018
       → ensure_default_admin() → 首次启动生成随机 admin 密码

连接池配置

  • 最大 8 连接
  • cache_size = -64000 (64MB)
  • wal_autocheckpoint = 1000

迁移历史

# 文件 内容
001 init.sql users, devices 表
002 assets.sql hardware_assets, software_assets, asset_changes 表
003 usb.sql usb_events, usb_policies, usb_device_patterns 表
004 alerts.sql alert_rules, alert_records 表
005 web_filter.sql web_filter_rules, web_access_logs 表
006 usage_timer.sql usage_daily, app_usage 表
007 software_blocker.sql software_blacklist, software_violations 表
008 popup_blocker.sql popup_blocker_rules, popup_block_stats 表
009 usb_file_audit.sql usb_file_operations 表
010 watermark.sql watermark_configs 表
011 token_security.sql token_families 表JWT token family 轮换)
012 disk_encryption.sql disk_encryption_status, disk_encryption_alerts 表
013 print_audit.sql print_events 表
014 clipboard_control.sql clipboard_rules, clipboard_violations 表
015 plugin_control.sql plugin_states 表
016 encryption_alerts_unique.sql 唯一约束修复
017 device_health_scores.sql device_health_scores 表
018 patch_management.sql patch_status 表

数据操作层 (db.rs)

DeviceRepo 提供:

  • 设备注册/查询/删除/分组
  • 资产增删改查
  • USB 事件记录和策略管理
  • 告警规则和记录操作
  • 所有插件数据的 CRUD

关联模块

  • server — 通过 db.rs 访问数据库
  • plugins — 每个插件有对应的数据库表

关键文件

文件 职责
crates/server/src/db.rs DeviceRepo 数据库操作方法集合
crates/server/src/main.rs 数据库初始化、迁移执行
migrations/001_init.sql ~ 018_*.sql 数据库迁移脚本