fix(device): 设备注册绑定接口添加 PoP 验签,照片下载改为设备端本地解密
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
-- ============================================================
|
||||
-- 安全设备 Demo - 数据库初始化脚本
|
||||
-- 库名: secure_device (与 application.properties 中配置一致)
|
||||
-- 说明: 存储照片元数据、设备、用户、用户照片索引
|
||||
-- 说明: 存储照片元数据、设备、用户
|
||||
-- 密文本身落盘于 uploads/ 目录
|
||||
-- 服务端永远不存明文照片和明文 DEK
|
||||
-- ============================================================
|
||||
@@ -46,23 +46,12 @@ CREATE TABLE IF NOT EXISTS `device` (
|
||||
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)',
|
||||
`uk_encrypted_base64` TEXT DEFAULT NULL COMMENT '用户主密钥 UK(经 SMK-AES-256-GCM 信封加密,格式 ivBase64:ciphertextBase64,非明文)',
|
||||
`password` VARCHAR(128) DEFAULT NULL COMMENT '登录密码 (BCrypt 哈希,60 字符,绝不明文)',
|
||||
`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 索引,导致「恢复出厂重新注册」时
|
||||
@@ -72,3 +61,25 @@ CREATE TABLE IF NOT EXISTS `user_photo` (
|
||||
-- ============================================================
|
||||
-- ALTER TABLE `device` DROP INDEX `idx_device_sn`;
|
||||
-- ALTER TABLE `device` ADD INDEX `idx_device_sn` (`sn`);
|
||||
|
||||
-- ============================================================
|
||||
-- 迁移:P0-1 修复(UK 明文落库 -> SMK 信封加密)
|
||||
-- ============================================================
|
||||
-- 列结构无需变更(uk_encrypted_base64 本就是 TEXT)。
|
||||
-- 已有旧数据(明文 UK,Base64 且不含冒号)需重新用 SMK 包裹。
|
||||
-- 纯 SQL 无法完成 AES-256-GCM(密钥来自环境变量 APP_MASTER_KEY),
|
||||
-- 因此由应用侧一次性 Runner 完成:
|
||||
--
|
||||
-- 设置环境变量后启动应用一次:
|
||||
-- export APP_MASTER_KEY=<Base64 的 32 字节>
|
||||
-- export APP_RUN_MIGRATION=true
|
||||
-- # 启动 Spring Boot,Runner 自动把明文 UK 重新包裹
|
||||
-- # 成功后关闭:unset APP_RUN_MIGRATION
|
||||
--
|
||||
-- 若数据库为演示数据、可整体重建,则无需迁移,直接:
|
||||
-- TRUNCATE TABLE `app_user`;
|
||||
-- TRUNCATE TABLE `encrypted_photo`;
|
||||
-- TRUNCATE TABLE `device`;
|
||||
-- 然后重新走注册流程即可(新账号 UK 默认即用 SMK 加密)。
|
||||
-- 注:早期版本存在 user_photo 关联表(已废弃),照片归属统一由 encrypted_photo.user_id 承担。
|
||||
-- ============================================================
|
||||
|
||||
Reference in New Issue
Block a user