Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

9.12. 數據區塊鏈

背景:例如我們需要一個排行榜,存儲活動的報名順序或者考試成績。我們防止有人作弊或者撰改,包括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 非對稱秘鑰。