Oracle强制访问控制就是B1级安全产品所必须实现的一个相关的基本安全的特性,我们都知道达梦的相关数据库安全版的强制访问以及控制功能,它在实现过程中研究并吸取了现有主流数据库产品的部分安全实现机制,包括DB2的LBAC(Label Based Access Control)和Oracle的LABEL SECRURITY。
下面将从标记安全的六个方面对DB2、Oracle和DM的模型进行描述,这个六个方面分别是:安全元素、策略应用、访问规则、访问特权、系统冲突、系统权限。
1 DB2 LBAC
1.1安全元素
(1)安全标记组件
支持三种类型的组件:数组、集合和树型。
a)创建数组组件
CREATESECURITYLABELCOMPONENTlevelARRAY [’TopSecret’,’Secret’,’Employee’,’Public’]
b)创建集合组件
CREATESECURITYLABELCOMPONENTproject Set={’A’,’B’,’C’,’D’}
c)创建树型组件
CREATESECURITYLABELCOMPONENTdepartment Tree={’G1’ROOT,’G2’UNDER’G1’,’G2’UNDER’G1’}
其中每个元素的名称不能超过32个字节,且同一组件内名称不能重复;数组最多可以包含65535个元素,集合和树型最多能包含64个元素。
(2)安全策略
创建一个安全策略:
CREATESECURITYPOLICYDataAccessCOMPONENTSlevel,departmentWITHDB2LABCRULES
定义一个策略要指定标记组件和访问规则。每个策略最多只能包含16个标记组件。系统现在只支持一中Oracle强制访问规则DB2LABCRULES,这个在访问规则小节中详细讲述。
(3)安全标记
创建一个安全标记:
以下是引用片段:
CREATESECURITYLABELDataAccess.ManagerLabelCOMPONENTlevel’secret’ project’A’,’B’,’C’ department’G1’;
安全标记可以应用到用户、行和列上。在插入数据时,也可以指定直接指定安全标记串,规则为按策略中组件的顺序,依次指定组件值,同一个组件的不同值用逗号隔开,不同组件之间用冒号隔开。
1.2策略应用
(1)用户安全标记
授予安全标记给用户时,同时可以指定访问权限。
GRANTSECURITYLABELDataAccess.ManagerLabelTOUSERJOEFORREADACCESS;
有三类访问权限:READ ACCESS、WRITE ACCESS和ALL ACCESS。如果读写安全标记同时存在,必须满足如下条件:数组类型组件的值,两个安全标记中必须相同;集合类型组件的值,写访问权限安全标记必须包含于读访问权限安全标记中;树类型组件的值,写访问权限安全标记必须和读访问权限安全标记相同或者其子孙节点。
其中一个用户能被授予多个安全标记,但对于一个安全策略中的标记最多只能授予一个读Oracle强制访问权限安全标记和一个写访问权限安全标记。
(2)行级安全标记
使用安全标记在行级保护表。
以下是引用片段:
CREATETABLET1( ADB2SECURITYLABEL, BINTEGER, CCHAR(5)) SECURITYPOLICYDataAccess
DB2SECURITYLABEL是标记列的类型,实际内部处理为VARBINARY(128)。标记列隐含是NOT NULL WITH DEFAULT,默认值是用户的写安全标记。
(3)列级安全标记
使用安全标记在列级保护表。
以下是引用片段:
CREATETABLET1( ACHAR(8)SECUREDWITHManagerLabel, BINTEGER, CCHAR(5)) SECURITYPOLICYDataAccess
(4)表级安全标记
标记安全标记实际是利用列级安全标记实现。
以下是引用片段:
CREATETABLET1( ACHAR(8)SECUREDWITHManagerLabel, BINTEGERSECUREDWITHManagerLabel, CCHAR(5)SECUREDWITHManagerLabel) SECURITYPOLICYDataAccess
在所有Oracle强制访问的列上设置同一个安全标记,把一个表作为一个整体和一个安全标记关联,这样节约了行级安全标记比较的时间开销和存储的空间开销。
注意:一个表上只能有一个安全策略,一个列上也只能使用表中安全策略的一个标记,一个表上也只能有一个行级标记列。