Skip to content

SECTL/SecScoreDB

Repository files navigation

SecScoreDB - 为 SecScore 设计的安全数据库系统

简介

SecScoreDB 是一个专为 SecScore 项目设计的高性能、轻量级数据库系统。它不仅提供了基于文件的持久化存储和动态字段管理,还内置了功能强大的 WebSocket 服务器,支持远程访问、实时订阅和细粒度的权限控制。

本项目采用 C++23 标准编写,利用现代 C++ 特性(Concepts, Ranges, Template Metaprogramming)保证了代码的高效与类型安全。

核心特性

数据库核心

  • 轻量级持久化:基于二进制文件的本地存储,高效且跨平台。
  • 动态 Schema:支持运行时定义数据模型(Student, Group),支持 Int, Double, String 类型。
  • 类型安全:通过 DynamicWrapper 提供编译期和运行时的类型检查。
  • Lambda 查询:支持使用 C++ Lambda 表达式进行灵活的数据过滤。
  • 自动序列化:集成 cereal 库,实现透明的数据序列化。

WebSocket 服务端

  • 标准协议:基于 JSON 的 WebSocket 通信协议 (v1.3)。
  • 权限控制 (RBAC):内置用户系统,支持 root(管理员)、普通用户和只读用户。
  • 实时订阅 (Pub/Sub):支持客户端订阅数据变更,服务端主动推送更新。
  • 高级查询:支持分页 (offset/limit)、排序和复杂逻辑组合查询。
  • 安全机制:支持 WSS(需反向代理),严格的越权访问检查。

架构组件

  1. SecScoreDB (Library): 核心数据库逻辑库。
  2. SecScoreDB-Websockets (Server): 基于 ixwebsocket 的独立服务器程序。
  3. SecScoreDB_UnitTests: 单元测试套件。
  4. SecScoreDB_E2ETests: WebSocket 端到端集成测试。

依赖项

本项目依赖以下开源库(通过 vcpkg 管理):

构建指南

环境要求

  • 编译器: 支持 C++23 (MSVC v143+ / GCC 14+ / Clang 17+)
  • 构建工具: CMake 3.28+
  • 包管理器: vcpkg

构建步骤

# 1. 克隆项目
git clone https://github.com/YourRepo/SecScoreDB.git
cd SecScoreDB

# 2. 配置 CMake (使用 vcpkg 工具链)
# 请确保 VCPKG_ROOT 环境变量已设置,或直接指定路径
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE="$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake"

# 3. 编译
cmake --build build --config Release

使用说明

1. 启动 WebSocket 服务器

编译完成后,运行 SecScoreDB-Websockets 可执行文件:

# 启动服务 (默认端口 8765)
./build/Release/SecScoreDB-Websockets --port 8765 --db ./my_database

# 首次启动建议指定管理员密码
./build/Release/SecScoreDB-Websockets --admin-pass "my_secret_password"

详细的通信协议文档请参考 SecScoreDB-WebSockets.md

2. C++ 库使用示例

#include "SecScoreDB.h"

// 定义 Schema
SchemaDef stuSchema{
    {"name", FieldType::String}, 
    {"age", FieldType::Int}, 
    {"score", FieldType::Double}
};

// 初始化数据库
SecScoreDB db("./test_db");
db.initStudentSchema(stuSchema);

// 创建数据
auto student = db.createStudent(1001);
student["name"] = std::string("Alice");
student["age"] = 20;
student["score"] = 95.5;

// 查询数据
auto results = db.queryStudent([](const Student& s) {
    return (int)s["age"] >= 18;
});

测试

项目包含完善的单元测试和端到端测试。

# 运行单元测试
./build/Release/SecScoreDB_UnitTests

# 运行 WebSocket E2E 测试 (需先启动服务器)
# 1. 启动服务器
./build/Release/SecScoreDB-Websockets --port 11451 --db ./testdata_e2e
# 2. 运行测试
./build/Release/SecScoreDB_E2ETests

许可证

本项目采用 LGPL 许可证。详见 LICENSE 文件。

About

a "database" designed for SecScore

Resources

License

Stars

Watchers

Forks

Packages

No packages published