知乎專欄 | 多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者” |
背景:例如我們需要一個排行榜,存儲活動的報名順序或者考試成績。我們防止有人作弊或者撰改,包括DBA在內。
任務:1.數據檢查,2.發現撰改,2.風險提示
方案:使用鏈表指針方案,將數據看成一個鏈條,中間任何改動,就如同鏈條被剪斷,改動之處之後的數據全部視為無效。
結果:達到數據後發現是否撰改,提示風險目的
CREATE TABLE `top100_list` ( `id` INT, `name` VARBINARY(16) NOT NULL, ...... ...... `extend` VARCHAR(32) NULL ) ENGINE=InnoDB;
演示數據
id | extend | ... 1 | 0 | ... 2 | 1 | ... 3 | 2 | ... 4 | 3 | ... 5 | 4 | ...
extend 始終整合上一條記錄,保證數據是連續的。但這樣還不夠,這樣只能防止數據被刪除,如果其他欄位被修改呢
id | extend | ... 1 | NULL | ... 2 | crc32(...) | ... 3 | crc32(...) | ... 4 | crc32(...) | ... 5 | crc32(...) | ...
我們使用crc算法運算上一條一整行的數據,你還可以使用 salt 技術干擾,這個 salt 只有軟件部署者知道,DBA和開發人員不得而知。
對於一般數據crc32 可能做到性能和安全性平衡,如果安全要求更高可以使用 sha256 等等,甚至採用 RSA 非對稱秘鑰。