Lightdb支持Immutable只读表

1,背景

在oracle19(或oracle21)里面,

在官方的介绍中,immutable不可变表和blockchain区块链表是放在一起的,看上去不可变表就是防篡改等级稍弱于区块链表的一种存在。

官方文档 :https://docs.oracle.com/en/database/oracle/oracle-database/21/admin/managing-tables.html
看不懂英文的,可以参考一下eygle大佬的这篇文章Oracle 21c 新特性:不可变表 Immutable tables 主要是提高安全性;

首先,我先用Oracle官网的例子建了一个不可变表:

CREATE IMMUTABLE TABLE trade_ledger (id NUMBER, luser VARCHAR2(40), value NUMBER)
       NO DROP  
       NO DELETE;

要想使用到这个特性,需要将数据库的 compatible 参数设置 19.11.0 之上(请预先评估这个参数的影响)。

否则会收到如下报错:

ERROR at line 1:
ORA-00406: COMPATIBLE parameter needs to be 19.11.0.0.0 or greater
ORA-00722: Feature "Immutable table" compatible string 19.0.0

例如:

# Oracle Database 19c
alter system set compatible='19.11.0' scope=spfile;

# Oracle Database 21c
alter system set compatible='21.0.0' scope=spfile;

shutdown immediate;
startup;

2,重点关注

LightDB在2023RP4版本里面,将支持IMMUTABLE功能,

语法如下:CREATE IMMUTABLE TABLE TABLENAME ....... [{NO DELETE}{NO UPDATE}{ NO DROP}{NO TRUNCATE} ]......

如上的[{NO DELETE}{NO UPDATE}{ NO DROP}{NO TRUNCATE} ]可以组合使用;

备注:当指定了immutable表之后,以上四个NO...权限选项必须要至少有一个;

2.1)NO DELETE的使用:

如上(在oracle模式下,下同),我们使用create immutable table immutable2(id int) no delete;

创建了一个immutable2的table,并插入了2条数据,然后我们来执行delete操作:

不管是delete指定数据还是delete表,均无法删除;

2.2)NO UPDATE的使用:

如上,我们使用create immutable table immutable3(id int) no update;

创建了一个immutable3的table,并插入了3条数据,然后我们来执行update操作:

不管是update指定数据还是update表,均无法删除;

同时,对该Immutable表指定no update时,该表也将禁止进行alter操作;

2.3)NO DROP的使用:

如上,我们使用create immutable table immutable4(id int) no drop;

创建了一个immutable4的table,并插入了3条数据,然后我们来执行drop操作:

指定了no drop的immutable表,无法进行drop操作;

2.4)NO TRUNCATE的使用:

如上,我们使用create immutable table immutable5(id int) no truncate;

创建了一个immutable5的table,并插入了3条数据,然后我们来执行truncate操作:

指定了no truncate的immutable表,无法进行truncate操作;

2.5)[{NO DELETE}{NO UPDATE}{ NO DROP}{NO TRUNCATE} ]的组合使用

2.5.1)NO TRUNCATE与NO UPDATE的组合使用:

如上,我们使用create immutable table immutable6(id int,id2 int) no truncate no update并插入了数据;

指定了no truncate&no update的immutable表,无法进行truncate与update操作;

2.5.2)NO TRUNCATE,NO UPDATE,NO DELETE,NO DROp的组合使用:

如上,我们使用create immutable table immutable7(id int,id2 int) no truncate no update no delete no drop并插入了数据;

上图可以看到,oracle模式下,指定了no truncate no update no delete no drop的immutable表,均无法进行以上操作。

以上功能,将在2023RP4的LightDB版本与大家见面!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值