查看账本历史操作记录
前提条件
- 系统中需要有审计管理员或者具有审计管理员权限的角色。
- 数据库正常运行,并且对防篡改数据库执行了一系列增、删、改等操作,保证在查询时段内有账本操作记录结果产生。
背景信息
- 只有拥有AUDITADMIN属性的用户才可以查看账本历史操作记录。有关数据库用户及创建用户的办法请参见用户。
查询全局区块表命令是直接查询gs_global_chain表,操作为:
SELECT * FROM gs_global_chain;
该表有10个字段,每个字段的含义见章节GS_GLOBAL_CHAIN。
查询用户历史表的命令是直接查询BLOCKCHAIN模式下的用户历史表,操作为:
例如用户表所在的模式为ledgernsp,表名为usertable,则对应的用户历史表名为blockchain.ledgernsp_usertable_hist;
SELECT * FROM blockchain.ledgernsp_usertable_hist;
用户历史表有4个字段,每个字段的含义见表1。
用户历史表的表名一般为blockchain.schemaname_tablename_hist形式。当防篡改用户表模式名或者表名过长导致前述方式生成的表名超出表名长度限制,则会采用blockchain.schema_oid_table_oid_hist的方式命名。
操作步骤
1、以安装Vastbase的操作系统用户(以vastbase为例)登录数据库主节点。
2、使用如下命令连接数据库。其中vastbase为需要连接的数据库名称,5432为端口号。
vsql -d vastbase -p 5432
3、创建一个带有防篡改属性的schema。
create schema fcg with blockchain;
4、在具有防篡改属性的schema中创建测试表,并执行DML操作。
create table fcg.table1(id int,name text);
insert into fcg.table1 values(1,'john');
insert into fcg.table1 values(2,'amy');
update fcg.table1 set id=3 where id=1;
delete from fcg.table1 where id=2;
5、开启扩展输出。
\x on
6、查询全局区块表记录。
SELECT * FROM gs_global_chain;
查询结果如下,该结果表明,用户vastbase连续执行了4条DML命令,包括INSERT、UPDATE和DELETE操作。
-[ RECORD 1 ]----------------------------------------
blocknum | 1
dbname | vastbase
username | vastbase
starttime | 2023-07-12 14:49:54.678809+08
relid | 27648
relnsp | fcg
relname | table1
relhash | 54c6727f4d7a5338
globalhash | 61f1ae7d8ac65fe32af9ad48e17b8aee
txcommand | insert into fcg.table1 values(1,'john');
-[ RECORD 2 ]---------------------------------------
blocknum | 2
dbname | vastbase
username | vastbase
starttime | 2023-07-12 14:50:05.436667+08
relid | 27648
relnsp | fcg
relname | table1
relhash | d5e5ce850ac59ce2
globalhash | a41a82847bc53fdaef8b63b9872b2141
txcommand | insert into fcg.table1 values(2,'amy');
-[ RECORD 3 ]---------------------------------------
blocknum | 3
dbname | vastbase
username | vastbase
starttime | 2023-07-12 14:50:25.894748+08
relid | 27648
relnsp | fcg
relname | table1
relhash | 7bde2026e668d59b
globalhash | e98a256501fc8efad974ab444951a1f4
txcommand | update fcg.table1 set id=3 where id=1;
-[ RECORD 4 ]---------------------------------------
blocknum | 4
dbname | vastbase
username | vastbase
starttime | 2023-07-12 14:51:06.948148+08
relid | 27648
relnsp | fcg
relname | table1
relhash | 2a1a317af53a631e
globalhash | d386a51bf390da25a4a9c7e134de2049
txcommand | delete from fcg.table1 where id=2;
7、关闭扩展输出。
\x off
8、查询历史表记录。
SELECT * FROM blockchain.fcg_table1_hist;
查询结果如下,该结果表示用户vastbase对fcg.table1表插入了2条数据,更新了1条数据,随后删除了1行数据,最后剩余一条数据,其hash值为d0a492a633e328d3
。
rec_num | hash_ins | hash_del | pre_hash
---------+------------------+------------------+----------------------------------
0 | 54c6727f4d7a5338 | | 42559e25a963a43b760ba1a3e4336e90
1 | d5e5ce850ac59ce2 | | de772d93ec3619b576806661e258e25d
2 | d0a492a633e328d3 | 54c6727f4d7a5338 | fa4b94aade07005ba117e5de7a439539
3 | | d5e5ce850ac59ce2 | d84efc6eec87683b49b1cb13f83b9254
(4 rows)
9、查询用户表数据及hash校验列。
SELECT *, hash FROM fcg.table1;
查询结果如下,表中剩余一条数据,其hash值与前一步骤的查询结果相同。
id | name | hash
----+------+------------------
3 | john | d0a492a633e328d3
(1 row)