Files
secure-device-demo/springboot-server/sql/schema.sql
TongTongStudio 93499fa189 feat: 重构为前后端分离架构并完善设备端演示
- 新增 Web 用户端(登录体系 + 统一 REST API 调用)
- 后端增加用户认证、统一 ApiResponse、CORS 支持
- Android 设备端迁移至 MVVM + DataBinding + Retrofit 网络层
- 完善 README 架构说明与密码学原理文档
- 新增 .gitignore 与持久化数据表说明
2026-08-21 04:34:58 +08:00

75 lines
4.4 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- 安全设备 Demo - 数据库初始化脚本
-- 库名: secure_device (与 application.properties 中配置一致)
-- 说明: 存储照片元数据、设备、用户、用户照片索引
-- 密文本身落盘于 uploads/ 目录
-- 服务端永远不存明文照片和明文 DEK
-- ============================================================
-- 1. 创建数据库(如已存在可跳过)
CREATE DATABASE IF NOT EXISTS `secure_device`
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
USE `secure_device`;
-- 2. 加密照片表(对应 EncryptedPhoto 实体)
CREATE TABLE IF NOT EXISTS `encrypted_photo` (
`photo_id` VARCHAR(64) NOT NULL COMMENT '照片唯一 ID (PK)',
`device_id` VARCHAR(64) DEFAULT NULL COMMENT '来源设备 ID',
`user_id` VARCHAR(64) DEFAULT NULL COMMENT '所属用户 ID',
`file_path` VARCHAR(512) DEFAULT NULL COMMENT '密文文件落盘路径',
`iv_base64` VARCHAR(256) DEFAULT NULL COMMENT 'GCM IV (Base64)',
`encrypted_dek_base64` VARCHAR(1024) DEFAULT NULL COMMENT 'DEK 被 UK 加密后的密文 (Base64)',
`metadata_signature` VARCHAR(1024) DEFAULT NULL COMMENT '设备私钥签名 (Base64)',
`upload_time` BIGINT DEFAULT NULL COMMENT '上传时间戳 (ms)',
PRIMARY KEY (`photo_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_device_id` (`device_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='加密照片元数据表';
-- 3. 设备表(对应 Device 实体)
CREATE TABLE IF NOT EXISTS `device` (
`device_id` VARCHAR(64) NOT NULL COMMENT '设备唯一 ID (UUID, PK)',
`sn` VARCHAR(64) NOT NULL COMMENT '设备序列号 (唯一)',
`user_id` VARCHAR(64) DEFAULT NULL COMMENT '绑定的用户 ID',
`public_key_base64` TEXT DEFAULT NULL COMMENT '设备 TEE 公钥 (Base64)',
`bind_time` BIGINT DEFAULT NULL COMMENT '绑定时间戳 (ms)',
`last_recovery_time` BIGINT DEFAULT NULL COMMENT '最近一次恢复时间戳 (ms)',
`active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否激活 (1 激活 / 0 停用)',
PRIMARY KEY (`device_id`),
KEY `idx_device_sn` (`sn`),
KEY `idx_device_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='设备注册与绑定状态表(一个 SN 可有多条历史记录,仅一条 active';
-- 4. 用户表(对应 User 实体)
CREATE TABLE IF NOT EXISTS `app_user` (
`user_id` VARCHAR(64) NOT NULL COMMENT '用户 ID (PK)',
`phone` VARCHAR(32) DEFAULT NULL COMMENT '手机号(用于短信验证)',
`uk_encrypted_base64` TEXT DEFAULT NULL COMMENT '用户主密钥 UK (Base64)',
`password` VARCHAR(128) DEFAULT NULL COMMENT '登录密码 (Demo 明文,生产用 BCrypt)',
`phone_verified` VARCHAR(8) DEFAULT NULL COMMENT '手机号是否已验证',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户与主密钥表';
-- 5. 用户-照片关联表(对应 UserPhoto 实体)
CREATE TABLE IF NOT EXISTS `user_photo` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`user_id` VARCHAR(64) NOT NULL COMMENT '用户 ID',
`photo_id` VARCHAR(64) NOT NULL COMMENT '照片 ID',
`created_time` BIGINT DEFAULT NULL COMMENT '创建时间戳 (ms)',
PRIMARY KEY (`id`),
KEY `idx_user_photo_user` (`user_id`),
KEY `idx_user_photo_photo` (`photo_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户照片索引表';
-- ============================================================
-- 已有数据库迁移(仅当旧库的 device 表带 SN 唯一索引时手动执行)
-- 说明:早期版本 device.sn 建为 UNIQUE 索引,导致「恢复出厂重新注册」时
-- 报 Duplicate entry。现将 SN 改为普通索引(一个 SN 可有多条历史设备记录,
-- 仅一条 active。spring.jpa.hibernate.ddl-auto=update 不会自动删除已存在
-- 的唯一索引,故需手动执行下面两句:
-- ============================================================
-- ALTER TABLE `device` DROP INDEX `idx_device_sn`;
-- ALTER TABLE `device` ADD INDEX `idx_device_sn` (`sn`);