ORACLE 12C新特性-不可见字段
Jan192014
在11G版本,ORACLE推出了不可见索引新特性,在12C版本,ORACLE又推出了不可见字段特性,可以很方便的屏蔽敏感数据。在对不可见字段做操作时,必须明确指定这个字段,否则操作将被拒绝,下面简单测试下这个功能。
创建测试表,包含不可见字段。
SQL> create table invisible_col(id number,name varchar2(20),addr varchar2(30) invisible); Table created.
上述测试表的ADDR字段就是不可见字段,通过DESC描述这张测试表结构时,不会显示不可见自动的信息。
SQL> desc invisible_col Name Null? Type ---------------------------------- -------- ------------------- ID NUMBER NAME VARCHAR2(20)
insert操作如果不指定不可见字段,是不允许对不可见字段插入数据的。
SQL> insert into invisible_col values(1,'dbdream','beijing'); insert into invisible_col values(1,'dbdream','beijing') * ERROR at line 1: ORA-00913: too many values SQL> insert into invisible_col(id,name,addr) values (1,'dbdream','beijing'); 1 row created. SQL> commit; Commit complete.
如果在查询是不指定不可见字段,是查询不到这个字段的信息的。
SQL> select * from invisible_col; ID NAME ---------- ---------------------------------------- 1 dbdream
必须明确指定不可见字段,才可以查询到。
SQL> select id,name,addr from invisible_col; ID NAME ADDR ---------- ---------------------------------------- ------------- 1 dbdream beijing
update操作就不用说了。
SQL> update invisible_col set addr='shanghai'; 1 row updated. SQL> commit; Commit complete.
在12C版本之前,要实现这个功能,通常都是使用视图屏蔽掉这个字段,但插入操作就会有问题,VPD技术好像也可以实现这个功能,使用12C版本就可以很方便实现了。
要想将表的字段设置成不可见字段或取消不可见字段也很容易,使用ALTER TABLE MODIFY命令就可以很方便设置字段是可见还是不可见属性。
SQL> alter table invisible_col modify (addr visible); Table altered. SQL> desc invisible_col Name Null? Type ------------------------------------ -------- --------------- ID NUMBER NAME VARCHAR2(20) ADDR VARCHAR2(30)
将字段属性设置为visible就是可见字段了,当设置为visible属性,就可以直接对这个字段操作,而不需要明确指定了。
SQL> insert into invisible_col(id,name,addr) values (2,'stream','beijing'); 1 row created. SQL> commit; Commit complete. SQL> select * from invisible_col; ID NAME ADDR ---------- ---------------------------------------- ---------- 1 dbdream shanghai
当然,也可以通过ALTER TABLE MODIFY命令直接将字段设置为不可见字段。
SQL> alter table invisible_col modify (addr invisible); Table altered. SQL> desc invisible_col Name Null? Type ------------------------------------ -------- ----------------- ID NUMBER NAME VARCHAR2(20)