You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

67 lines
6.5 KiB

-- 通用密评敏感字段密文存储表
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='数据完整性校验表';