-- +goose Up -- 实名唯一性:同一身份证号最多绑定一个已实名账号。 -- encrypted_id_no 使用随机 nonce,同一身份证每次密文不同,不能直接做唯一键; -- 因此新增由明文身份证号 + 服务端密钥计算的 HMAC 指纹,仅认证通过时写入。 -- 存量记录先保持 NULL,查询时按 masked_id_no + 解密比对兼容,命中后按需补写。 ALTER TABLE user_realname ADD COLUMN id_no_hash CHAR(64) NULL COMMENT '身份证号 HMAC-SHA256 指纹,仅认证通过时写入' AFTER encrypted_id_no, ADD KEY idx_user_realname_masked_id_no (masked_id_no), ADD UNIQUE KEY uk_user_realname_id_no_hash (id_no_hash); -- +goose Down ALTER TABLE user_realname DROP INDEX uk_user_realname_id_no_hash, DROP INDEX idx_user_realname_masked_id_no, DROP COLUMN id_no_hash;