-- 通用密评敏感字段密文存储表 CREATE TABLE crypto_sensitive_data ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', table_name VARCHAR(64) NOT NULL COMMENT '业务表名,如 sys_user', biz_id VARCHAR(128) NOT NULL COMMENT '业务表主键ID,字符串兼容数字/UUID主键', field_code VARCHAR(64) NOT NULL COMMENT '业务字段编码,username/id_card/phone/password', field_value VARCHAR(512) DEFAULT NULL COMMENT '字段原始值', cipher_text TEXT COMMENT 'SM4-CBC密文Base64;password单向哈希场景此字段为空', field_iv VARCHAR(64) COMMENT 'SM4-CBC初始化向量,16字节随机值Base64;password此字段为空', plain_hash VARCHAR(128) COMMENT '明文SM3哈希,仅用于等值查询,不可逆', field_salt VARCHAR(64) COMMENT '哈希盐值,仅password单向哈希字段使用', encrypt_alg VARCHAR(32) NOT NULL DEFAULT 'SM4-CBC' COMMENT '加密算法:SM4-CBC / SM3', key_version VARCHAR(32) NOT NULL COMMENT '密钥版本号,用于密钥轮换,密评必查', is_active TINYINT NOT NULL DEFAULT 1 COMMENT '是否为当前有效密文:1有效,0历史旧密文(密钥轮换保留)', is_deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除:0未删除,1已删除', create_by BIGINT COMMENT '创建人ID', update_by BIGINT COMMENT '更新人ID', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY uk_table_biz_field (table_name, biz_id, field_code, is_active, is_deleted), KEY idx_table_bizid (table_name, biz_id), KEY idx_plain_hash (plain_hash), KEY idx_key_version (key_version), KEY idx_field_code (field_code) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='密评敏感字段密文存储表'; -- 密评敏感操作审计表(记录解密、新增、修改、密钥轮换,满足密码应用审计) CREATE TABLE crypto_operation_audit ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', sensitive_data_id BIGINT COMMENT '关联 crypto_sensitive_data 主键ID', table_name VARCHAR(64) NOT NULL COMMENT '业务表名', biz_id VARCHAR(128) NOT NULL COMMENT '业务记录主键', field_code VARCHAR(64) NOT NULL COMMENT '敏感字段编码', operate_type TINYINT NOT NULL COMMENT '操作类型:1新增密文 2解密查看 3修改密文 4密钥轮换', operator_id BIGINT COMMENT '操作人ID(系统用户ID)', operator_ip VARCHAR(64) COMMENT '操作客户端IP地址', operate_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '操作发生时间', remark TEXT COMMENT '操作备注信息', is_deleted TINYINT DEFAULT 0 COMMENT '逻辑删除', KEY idx_sensitive_data_id (sensitive_data_id), KEY idx_table_bizid (table_name, biz_id), KEY idx_operate_time (operate_time), KEY idx_operator_id (operator_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='密评敏感字段操作审计表'; -- 通用数据完整性校验表(密评 GB/T 39786 数据完整性) CREATE TABLE crypto_integrity_data ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', table_name VARCHAR(64) NOT NULL COMMENT '业务表名,如 sys_user', biz_id VARCHAR(128) NOT NULL COMMENT '业务记录主键,字符串兼容数字/UUID', field_list TEXT NOT NULL COMMENT '参与完整性摘要的字段列表,逗号分隔:username,id_card,phone', sm3_hash VARCHAR(128) NOT NULL COMMENT '业务字段拼接明文的SM3摘要值,用于完整性校验', hash_alg VARCHAR(32) NOT NULL DEFAULT 'SM3' COMMENT '完整性哈希算法:SM3', generate_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '摘要生成时间', last_verify_time DATETIME NULL COMMENT '最近一次完整性校验时间', verify_result TINYINT NULL COMMENT '校验结果:0未校验 1校验通过 2校验失败(篡改)', is_deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除', create_by BIGINT COMMENT '创建人ID', update_by BIGINT COMMENT '更新人ID', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间', -- 唯一约束:一张业务表,一条业务记录,仅保留一条有效完整性摘要 UNIQUE KEY uk_table_biz (table_name, biz_id, is_deleted), KEY idx_table_bizid (table_name, biz_id), KEY idx_verify_result (verify_result), KEY idx_generate_time (generate_time) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据完整性校验表';