EXEC sa_user_admin.set_user_labels(policy_name=> 'TEST_POLICY',user_name =>'TEST',max_read_label =>'READ222');
执行查询:
发现还是这三条数据,因为其它数据TEST_LABEL列未定义值; 通过SYS用户,对数据进行赋值;
这个时候,就可以看到所有的数据了;因为前面提到:
EXEC sa_components.create_level('TEST_POLICY', 111,'READ111', 'Public Level'); EXEC sa_components.create_level('TEST_POLICY', 222,'READ222', 'Internal Level');
第一个参数是上一步创建的安全策略的名字。第二个参数是Level的等级,数字越大表示权限越高,比如此处具有'READ222'等级的就可以同时查看有'READ111'等级的数据。第三个参数是Level的短名,随便定义。第四个参数是Level的长名,只是起到一个说明的作用,随便定义。
3.9、新增LEVEL
这里考虑到一点,因为LEVEL的数据越大,级别越高,加入我需要新增一个LEVEL,用来控制用户的访问,就可以按照如下操作:
1、
定义LEVEL
EXEC sa_components.create_level('zftang_POLICY', 333,'PUBLIC', 'Public Level1');
-------创建一个LEVEL
2、
定义LABEL
EXEC sa_label_admin.create_label('TEST_POLICY', '333','READ333', TRUE);
3 、 将LABEL赋予用户
在这里,如果赋予TEST用户READ111的LEVEL,那么这个用户只能看到值=111的数据; 如果赋予TEST用户READ222的LEVEL,可以看到值=111,或者=222的数据 如果赋予TEST用户READ333的LEVEL,就可以看到=111,222,333的数据; EXEC sa_user_admin.set_user_labels(policy_name=> 'TEST_POLICY',user_name =>'TEST',max_read_label =>'READ111');
至此,这个Oracle Label Security 的实验基本上是完成了,达到了我们预先计划的目标。
而关于性能方面,如果表中数据量很大,那么出于性能考虑,可能需要在Label列上(本例中的DOC_LABEL)添加合适的索引,根据cardinality的多少,选择B-Tree或者bitmap索引。
结论