账本数据库机制
可获得性
本特性自openGauss 2.1.0版本开始引入。
特性简介
账本数据库特性,对用户指定的防篡改表增加校验信息,并记录用户对其数据的操作历史,通过数据和操作历史的一致性校验来保证用户数据无法被恶意篡改。在用户对防篡改表执行DML操作时,系统对防篡改表增加少量额外的行级校验信息,同时记录操作的SQL语句和数据的变化历史。通过特性提供的校验接口,用户可以方便的校验防篡改表中的数据是否与系统记录的操作信息是否一致。
客户价值
账本数据库通过提供对用户数据的操作记录、数据历史变化记录以及易用的一致性的校验接口,方便用户随时校验数据库中的敏感信息是否发生恶意篡改,有效提高数据库防篡改能力。
特性描述
账本数据库采用账本Schema对普通表和防篡改用户表进行隔离。用户在账本Schema中创建的行存表具有防篡改属性,即为防篡改用户表。用户向防篡改用户表中插入数据时,系统会自动生成少量行级校验信息。在用户执行DML时,系统会在全局区块表(GS_GLOBAL_CHAIN)中记录用户的操作、在用户表相应的历史表中记录数据的更改等信息,操作记录、数据变化记录和用户表中的数据三者严格保持一致。账本数据库提供高性能校验接口,能够供用户方便的校验数据的一致性,如果一致性校验失败,则说明数据可能发生篡改,需要及时联系审计管理员回溯操作记录历史。
防篡改表在创建时,支持以下数据类型: char, abstime, bigint, boolean, bytea, character varying, character, date, double precision, int2vector, integer, interval, money, name, numeric, nvarchar2, oid, oidvector, raw, real, record, reltime, smalldatetime, smallint, text, time with time zone, time without time zone, timestamp with time zone, timestamp without time zone, tinyint, uuid。
特性增强
无。
特性约束
- 防篡改模式下的行存表具有防篡改属性,而临时表、UNLOGGED表、列存表、时序表、Ustore表等均不具有防篡改属性。
- 不允许修改防篡改用户表的结构,不允许truncate防篡改相关表,不允许将防篡改用户表切换到普通的Schema中,不允许将非防篡改表切换到防篡改Schema中。
- 不支持指定二级分区表为防篡改表。防篡改表如果为分区表,则不支持exchange partition、drop partition、truncate partition等操作。
- 不支持使用函数、TRIGGER修改防篡改用户表数据。
- 防篡改用户表创建时不能有名为“hash”的列。
- 普通用户调用篡改校验接口只能校验自己有权查询的表。
- 只允许审计管理员和初始用户查询全局区块表和BLOCKCHAIN模式中的表,普通用户无权访问,所有用户均无权修改。
- 根据用户历史表命名规则,若待创建表的Schema或表名以’_‘结尾或开头,可能会出现对应历史表名与已有表名冲突的情况,需要重新命名。
- 账本数据库目前针对用户行级数据的hash摘要仅用来保证数据的一致性,当前能力暂时无法阻止攻击用户直接对数据文件的篡改。
- 防篡改模式下不支持二级分区表。
- 防篡改模式下的表的索引不支持引用“hash”列。
依赖关系
无。