首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

传统数据库也能实现区块链存储

传统数据库也能实现区块链存储

本文节选自电子书《Netkiller Architect 手札》,延伸阅读《Netkiller Blockchain 手札》

最近我区块链技术非常火,区块链优势是去中心化,数据不可撰改,但你仔细想想自己需求,真的需要区块链吗?还是需要区块链上的一些特性?例如数据不可撰改。

区块链并非能解决所有问题,虽然他也算是一种数据库,它能解决问题十分有限,它的数据管理和查询能力还打不到 NoSQL 的水平,更别提 SQL 的复杂应用。所以在实际的应用中,区块链不能替代数据,只能互补。

那么,我仅仅需要区块链的一个特性例如:“数据不可撰改”。

数据不可撰改包含几种情况:

不能修改数据

不能随意在中间插入

不能打乱前后顺序

如果数据被撰改,需能够侦测出,并展示数据

怎样实现这个需求呢?

数据只能被顺序追加,追加时检查插入上一个数据库快的 hash 值。

通过触发器禁止修改数据,执行update 抛出异常

通过触发器禁止删除数据,执行delete 语句抛出异常

如果是mysql存储引擎可以选择 Archive 更为安全

数据读取时使用UDF函数检查,也可以在应用程序中检查。前后hash值不正确,就提示数据有风险。

5.10. 数据区块链

背景:例如我们需要一个排行榜,存储活动的报名顺序或者考试成绩。我们防止有人作弊或者撰改,包括DBA在内。

任务:1.数据检查,2.发现撰改,2.风险提示

方案:使用链表指针方案,将数据看成一个链条,中间任何改动,就如同链条被剪断,改动之处之后的数据全部视为无效。

结果:达到数据后发现是否撰改,提示风险目的

CREATE TABLE`top100_list`(`id`INT,`name`VARBINARY(16)NOT NULL,............`extend`VARCHAR(32)NULL)ENGINE=InnoDB;

演示数据

id|extend|...1||...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 非对称秘钥。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180306G1CPUZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券