--- title: 資料庫架構 tags: - 第一組 --- # 資料庫架構 本資料庫設計用於支援惡意程式樣本收集、分析、標註與存取控制,支援完整的樣本追蹤與特徵管理流程,並可延伸整合自動化分析或威脅情報平台。 ## 核心資料表 ### 1.樣本 ```sql CREATE TABLE "samples" ( -- sha256 "sample_id" char(64) NOT NULL, "original_name" text, "md5_hash" char(32) NOT NULL, "sha1_hash" char(40) NOT NULL, "sha256_hash" char(64) NOT NULL, "file_size" integer NOT NULL, "file_type" text NOT NULL, "platform_id" bigint, "malware_family_id" bigint, "malware_type_id" bigint, "threat_actor_id" bigint NOT NULL, "source_id" bigint NOT NULL, "sample_file_path" text NOT NULL, "uploaded_by" uuid NOT NULL, "uploaded_at" timestamp NOT NULL, "notes" text, PRIMARY KEY ("sample_id") ); ``` ```python class SampleBase(SQLModel): original_name: str | None = Field(default=None) md5_hash: str = Field(max_length=32) sha1_hash: str = Field(max_length=40) sha256_hash: str = Field(max_length=64) file_size: int file_type: str sample_file_path: str notes: str | None = Field(default=None) class SampleCreate(SQLModel): original_name: str | None = Field(default=None) sample_file_path: str notes: str | None = Field(default=None) platform_id: int | None = Field(default=None) malware_family_id: int | None = Field(default=None) malware_type_id: int | None = Field(default=None) threat_actor_id: int | None = Field(default=None) source_id: int uploaded_by: uuid.UUID class SampleUpdate(SQLModel): original_name: str | None = Field(default=None) sample_file_path: str | None = Field(default=None) notes: str | None = Field(default=None) platform_id: int | None = Field(default=None) malware_family_id: int | None = Field(default=None) malware_type_id: int | None = Field(default=None) threat_actor_id: int | None = Field(default=None) source_id: int | None = Field(default=None) uploaded_by: uuid.UUID | None = Field(default=None) class Sample(SampleBase, table=True): __tablename__ = "samples" # type: ignore sample_id: str = Field(primary_key=True) # sha256_hash platform_id: int | None = Field(default=None) malware_family_id: int | None = Field(default=None) malware_type_id: int | None = Field(default=None) threat_actor_id: int | None = Field(default=None) source_id: int uploaded_by: uuid.UUID uploaded_at: datetime = Field(default_factory=datetime.now) ``` `sample_id` 採用 `sha256` 作為主鍵,能保證唯一性,避免重複儲存同一樣本。樣本的分析與描述資訊透過多個 `*_library` 表進行正規化,例如平台、惡意家族、類型、來源等。這樣的設計避免重複資料並提供良好的延展性。 ### 2.樣本特徵 ```sql CREATE TABLE "features" ( "feature_id" bigint NOT NULL, "sample_id" char(64) NOT NULL, "feature_type_id" bigint NOT NULL, "rule_name" text NOT NULL, "rule_content" text NOT NULL, "extra_data" jsonb, "created_by" uuid NOT NULL, "created_at" timestamp NOT NULL, PRIMARY KEY ("feature_id") ); ``` 樣本與特徵都可以加上多個標籤(tags),使用多對多關聯表。 ### 3. 使用者 ```sql CREATE TABLE "users" ( "user_id" uuid NOT NULL, "name" text NOT NULL, "email" text NOT NULL UNIQUE, "password_hash" text NOT NULL, "created_at" timestamp NOT NULL, PRIMARY KEY ("user_id") ); ``` 透過 `roles` 與 `user_roles` 建立基本的 RBAC 權限控制架構。