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

2023-11-12

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

微信订阅号 netkiller-ebook (微信扫描二维码)

QQ:13721218 请注明“读者”

QQ群:128659835 请注明“读者”

网站:http://www.netkiller.cn

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

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

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

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

  1. 不能修改数据
  2. 不能随意在中间插入
  3. 不能打乱前后顺序

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

怎样实现这个需求呢?

  1. 数据只能被顺序追加,追加时检查插入上一个数据库快的 hash 值。
  2. 通过触发器禁止修改数据,执行update 抛出异常
  3. 通过触发器禁止删除数据,执行delete 语句抛出异常
  4. 如果是mysql存储引擎可以选择 Archive 更为安全
  5. 数据读取时使用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 | 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 非对称秘钥。

转载于:https://my.oschina.net/neochen/blog/1630629

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

传统数据库也能实现区块链存储 的相关文章

随机推荐

  • SpringBoot 三种拦截http请求方式Filter,interceptor和aop

    SpringBoot 三种拦截http请求方式Filter interceptor和aop 这三种拦截方式的拦截顺序是 filter gt Interceptor gt ControllerAdvice gt Aspect gt Contr
  • office word复制图片出错

    前言 今天在使用word文档时 发现在复制图片时 总是复制的不完整 Word中插入图片只显示一行的 图片缺失的部分感觉和文字交织在一起 估计原因是 之前图片复制在word中的标题的位置上了 解决 点击word上方的 正文 然后再复制图片 问
  • 【C++ primer】第一章 快速入门 读书笔记

    1 1 编写简单的c 程序 返回 0值表明程序程序成功执行完毕 非零返回值表明有错误出现 返回值类型必须和函数的返回类型相同 或者可以转换成函数的返回类型 1 1 1 编译与执行程序 1 2 初窥输入 输出 术语 流 试图说明字符是随着时间
  • Python 爬虫库以及库函数总结&&踩坑

    1 Re库的基本使用 Re库介绍 Re库是Python的标准库 主要用于字符串匹配 调用方式 import re 正则表达式的表示类型 raw string类型 原生字符串类型 re库采用raw string类型表示正则表达式 表示为 r
  • Qt文本的淡入淡出

    Qt文本的淡入淡出 对于写在Qlabel中的文本 想对其实现淡入和淡出的特效 需要用到QGraphicsOpacityEffect 并搭配计时器使用 示例如下 h文件 include
  • [虎符ctf2021]你会日志文件分析吗

    SQL盲注 拿到一份日志 毫无头绪 上网查wp得知为sql盲注 得再学 1 看时间和后门的长度 sleep 2 1 HTTP 1 1 200 377 如果正确会休眠两秒 那么就找到377长度的请求 Ctrl F sleep 2 1 HTTP
  • 独立服务器比较虚拟机有什么好处

    1 资源不足 采用虚拟主机服务的用户实际上很难确切地知道到底有多少客户正在同时分享现实服务器的资源 当与您的网站在同一台服务器上的某个 些 网站的访问量很大时 这台服务器的系统结构可能很容易就不堪重负 出现过载 从而大大影响其它网站系统的性
  • Qt 定时器实现循环

    概述 后台进程需要循环时第一时间想到的就是while 但是涉及界面交互时就不那么适用了 例如在Qt主线程中直接使用循环就会导致界面卡死 此时可以使用多线程来解决这个问题 但只是做一些简单的测试工具时 考虑线程大可不必 第二种方法就是在whi
  • c语言rtsp客户端拉流,如何基于C++解决RTSP取流报错问题

    使用g opencv demo cpp o test 会报以下错误 这是我的代码 include include include include include include include include pragma comment
  • Ubuntu 14.04 apt-get update失效解决

    当运行apt get update后出现如下错误时 E Some index files failed to download they have been ignored or old ones used instead 可以将目录下 v
  • centos升级g++7.3.0

    sudo yum install centos release scl sudo yum install devtoolset 7 scl enable devtoolset 7 bash
  • Dubbo分布式日志追踪

    很多互联网公司都用的dubbo分布式框架进行微服务的开发 一个大系统往往会被拆分成很多不同的子系统 并且子系统还会部署多台机器 当其中一个系统出问题了 查看日志十分麻烦 所以我们需要一个固定的流程ID和机器ip地址等来把所有的日志穿起来 当
  • 如何安装vcpk

    如何安装vcpk 要安装 3fd 库 首先你需要安装 vcpkg 包管理器 以下是安装 vcpkg 的步骤 打开一个命令行终端 如 Windows 的命令提示符或 PowerShell 或者 Linux Mac 的终端 克隆 vcpkg 存
  • [云原生专题-53]:Kubesphere云治理-操作-通过Kubesphere应用商店一键部署微服务应用-消息中间件RabbitMQ的安装与部署

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122933831 目录 前言 第1章
  • exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp

    exportfs命令 参数说明如下 a 全部挂载 或卸载 etc exports文件内的设定 r 重新挂载 etc exports中的设置 此外同步更新 etc exports及 var lib nfs xtab中的内容 u 卸载某一目录
  • python面向对象编程 类与实例 继承与多态 isinstance

    class Student object def init self name gender self name name self gender gender def set gender self gender if gender ma
  • C语言学习

    目录 原码反码和补码 原码 true code 反码 complemental code 补码 ones complement code 溢出的处理 位运算符 移位操作符 lt lt gt gt lt lt 左移 gt gt 右移 按位操作
  • 2023深圳杯 C题无人机协同避障航迹规划 最新论文

    完整论文已发布 目录 无人机协同避障航迹规划 摘要 一 问题重述 1 1 背景 1 2 重述 二 模型的假设 三 符号说明 四 问题分析 4 1 问题一分析
  • IDEA 打开SpringBoot服务控制台,管理多个服务

    IDEA 打开SpringBoot服务控制台 管理多个服务 作者简介 努力的clz 一个努力编程的菜鸟 文章专栏 软件使用技巧 记录一下平时开发过程中 使用各种 编程软件 的一些使用技巧 实现步骤如下 第一步 选择 视图 工具窗口 服务 第
  • 传统数据库也能实现区块链存储

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 本文节选自电子书 Netkiller Architect 手札 延伸阅读 Netkiller Blockchain 手札 微信订阅号 netkiller ebook 微信扫