首页 > 数据库 >openGauss学习笔记-123 openGauss 数据库管理-设置账本数据库-账本数据库概述

openGauss学习笔记-123 openGauss 数据库管理-设置账本数据库-账本数据库概述

时间:2023-11-14 21:32:54浏览次数:31  
标签:ledgernsp hash 数据库 用户 usertable 篡改 openGauss 账本

openGauss学习笔记-123 openGauss 数据库管理-设置账本数据库-账本数据库概述

123.1 背景信息

账本数据库融合了区块链思想,将用户操作记录至两种历史表中:用户历史表和全局区块表。当用户创建防篡改用户表时,系统将自动为该表添加一个hash列来保存每行数据的hash摘要信息,同时在blockchain模式下会创建一张用户历史表来记录对应用户表中每条数据的变更行为;而用户对防篡改用户表的一次修改行为将记录至全局区块表中。由于历史表具有只可追加不可修改的特点,因此历史表记录串联起来便形成了用户对防篡改用户表的修改历史。

用户历史表命名和结构如下:

表 1 用户历史表blockchain.<schemaname>_<tablename>_hist所包含的字段

字段名 类型 描述
rec_num bigint 行级修改操作在历史表中的执行序号。
hash_ins hash16 INSERT或UPDATE操作插入的数据行的hash值。
hash_del hash16 DELETE或UPDATE操作删除的数据行的hash值。
pre_hash hash32 当前用户历史表的数据整体摘要。

表 2 hash_ins与hash_del场景对应关系

- hash_ins hash_del
INSERT (√) 插入行的hash值
DELETE (√) 删除行的hash值。
UPDATE (√) 新插入数据的hash值 (√) 删除前该行的hash值。

123.2 操作步骤

1.创建防篡改模式。

例如,创建防篡改模式ledgernsp。

openGauss=# CREATE SCHEMA ledgernsp WITH BLOCKCHAIN;

2.在防篡改模式下创建防篡改用户表。

例如,创建防篡改用户表ledgernsp.usertable。

openGauss=# CREATE TABLE ledgernsp.usertable(id int, name text);

查看防篡改用户表结构及其对应的用户历史表结构。

openGauss=# \d+ ledgernsp.usertable;
openGauss=# \d+ blockchain.ledgernsp_usertable_hist;

执行结果如下:

openGauss=# \d+ ledgernsp.usertable;
                     Table "ledgernsp.usertable"
 Column |  Type   | Modifiers | Storage  | Stats target | Description
--------+---------+-----------+----------+--------------+-------------
 id     | integer |           | plain    |              |
 name   | text    |           | extended |              |
 hash   | hash16  |           | plain    |              |
Has OIDs: no
Options: orientation=row, compression=no
History table name: ledgernsp_usertable_hist

openGauss=# \d+ blockchain.ledgernsp_usertable_hist;
             Table "blockchain.ledgernsp_usertable_hist"
  Column  |  Type  | Modifiers | Storage | Stats target | Description
----------+--------+-----------+---------+--------------+-------------
 rec_num  | bigint |           | plain   |              |
 hash_ins | hash16 |           | plain   |              |
 hash_del | hash16 |           | plain   |              |
 pre_hash | hash32 |           | plain   |              |
Indexes:
    "gs_hist_16388_index" PRIMARY KEY, btree (rec_num int4_ops) TABLESPACE pg_default
Has OIDs: no
Options: internal_mask=263

img 说明:

  • 防篡改表不支持非行存表、临时表、外表、unlog表、非行存表均无防篡改属性。
  • 防篡改表在创建时会自动增加一个名为hash的系统列,所以防篡改表单表最大列数为1599。

img 警告:

  • dbe_perf和snapshot两个模式不能ALTER为blockchain属性,如:ALTER SCHEMA dbe_perf WITH BLOCKCHAIN;。
  • 系统模式不能 ALTER 为blockchain属性,如:ALTER SCHEMA pg_catalog WITH BLOCKCHAIN;。
  • 包含表的SCHEMA不能通过ALTER SCHEMA语句修改属性为blockchain。

3.修改防篡改用户表数据。

例如,对防篡改用户表执行INSERT/UPDATE/DELETE。

openGauss=# INSERT INTO ledgernsp.usertable VALUES(1, 'alex'), (2, 'bob'), (3, 'peter');
INSERT 0 3
openGauss=# SELECT *, hash FROM ledgernsp.usertable ORDER BY id;
 id | name  |       hash
----+-------+------------------
  1 | alex  | 1f2e543c580cb8c5
  2 | bob   | 8fcd74a8a6a4b484
  3 | peter | f51b4b1b12d0354b
(3 rows)

openGauss=# UPDATE ledgernsp.usertable SET name = 'bob2' WHERE id = 2;
UPDATE 1
openGauss=# SELECT *, hash FROM ledgernsp.usertable ORDER BY id;
 id | name  |       hash
----+-------+------------------
  1 | alex  | 1f2e543c580cb8c5
  2 | bob2  | 437761affbb7c605
  3 | peter | f51b4b1b12d0354b
(3 rows)


openGauss=# DELETE FROM ledgernsp.usertable WHERE id = 3;
DELETE 1
openGauss=# SELECT *, hash FROM ledgernsp.usertable ORDER BY id;
 id | name |       hash
----+------+------------------
  1 | alex | 1f2e543c580cb8c5
  2 | bob2 | 437761affbb7c605
(2 rows)

标签:ledgernsp,hash,数据库,用户,usertable,篡改,openGauss,账本
From: https://blog.51cto.com/shuchaoyang/8378806

相关文章

  • Oracle启动数据库报ORA-01102解决办法
    1.机器启动之后登录服务器使用sqlplus/assysdba登录数据库发现数据库并没有启动之前把数据库服务添加过开机自启动![在这里插入图片描述](https://img-blog.csdnimg.cn/c25a5e40f3274621b708d974065bf650.png)2.使用startup命令启动数据库报错了SYS@orcl>startup;ORACLE例程已......
  • HackerGPT 黑客技术、工具和策略的广泛数据库AI
    黑客GPTHackerGPT是您在黑客世界中黑客的数字伙伴。这款人工智能助手在设计时考虑到了黑客黑客的独特需求,黑客知识和帮助的最前沿。HackerGPT配备了包含黑客技术、工具和策略的广泛的数据库,它不仅仅是一个信息资源,它还是您黑客之旅的积极参与者。无论您是想要学习技巧的初学者,......
  • openGauss集群主库出现流复制延迟告警
    问题描述:环境是openGauss5.0集群,在一次意外重启数据库之后。收到了一个主库的主从延迟告警,只有从库才能出现延迟,主库怎么会出现了告警延迟告警信息:Status:ResolvedHostname:hkuatxcrecondb01IPAddress:192.168.163.21AlertMessage:Opengauss:Streaminglagwith{#M......
  • Windows下如何快速移动MySQL/MariaDB数据库文件
    近期遇到一个要迁移数据库的问题,用户说不希望数据库文件存在于C盘。查了一下资料,这里做个总结。这个方法适用于MySQL和MariaDB。 步骤如下:1、停止数据库服务2、将数据库移动到需要迁移的路径3、修改安装路径data目录下的my.ini文件4、将 datadir=xxx改成需要迁移的路径5......
  • mongo数据库
    在k8s安装mongo数据库时,新版本(测试为7.0.2版本)的mongo的根用户和根用户密码的环境变量变了,现在是MONGODB_ROOT_USER和MONGODB_ROOT_PASSWORD而不是之前的MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_PASSWORD使用这两个环境变量会认证失败。......
  • 数据库 常用,字符串类型 数据转换成date 类型数据
      数据库中 时间是用:VARCHAR2  字符串类型数据:20231226  来显示 '20231226'char字符串转换成date类型时间selectto_date(字段名,'yyyy-MM-dd')fromxx转换后,显示成:'2023-12-2600:00:00.000'  ......
  • 大型数据库实验五
    ......
  • 世界土壤数据库(HWSD)土壤数据集
    简介:HWSD(HarmonizedWorldSoilDatabase)是联合国粮食及农业组织(FAO)和国际土壤参考与信息中心(ISRIC)共同开发的世界土壤数据集。该数据集是一份高分辨率(1km),全球范围的土壤数据库,包括有关土壤类型、土壤属性、土壤质地、土层深度和土壤水分等方面的信息。HWSD数据集是基于大量地面测......
  • 关于sql server 只能查看特定数据库的某张表
    1.正常新建登录名--》在需要设置的数据库中新建用户(用户名和登录名一致、默认架构选择dbo)-->在对应的表或者存储过程给到对应的权限新建登录名新建数据库用户设置表对应的权限其他数据库无权限(但是其他数据库名称可以查看这一点怎么去避免)2.给public角色的访问任意......
  • 后端与数据库
    目录一、导出数据表二、传输至本地三、后端建表结构四、迁移五、导入数据六、后端查询字段及数据一、导出数据表远程服务器的SQLServer数据库导出数据表步骤:在表所在的数据库上右击-->任务-->导出数据我导出的是excel表格的文件格式二、传输至本地将导出的数据表......