1.一种基于二叉树的访问控制策略存储和匹配方法,其特征在于,该方法具体包括:
(1).在基于RBAC的访问控制系统中构造数据集;
需要构造的数据集包括:用户集U、部门集D、角色集R、操作集OP、对象集OB、访问控制策略集P;
所述的用户集U是系统中所有用户的集合;
所述的部门集D是系统中所有部门的集合;
所述的角色集R是系统中所有角色的集合,分为普通角色集CR和系统角色集SR,即R={CR,SR};系统角色集SR是系统角色的集合,任务是对系统进行日常管理和对普通角色进行权限分配,SR={SYAD,SEAD,SEAU},SYAD为系统管理员、SEAD为安全管理员、SEAU为安全审计员,系统管理员SYAD负责系统的日常运行维护,安全管理员SEAD负责系统日常安全保密管理,安全审计员SEAU负责对系统管理员、安全管理员的操作行为进行审计分析和监督检查;普通角色集CR是系统中除系统角色以外的角色集合;
所述的操作集OP是系统允许用户对文件对象执行的一系列操作的集合;
所述的对象集OB是系统中保护的所有文件的集合;
所述的访问控制策略集P是包含一组访问控制规则的集合,P={r1,r2,…,ri,…,rn},ri为访问控制规则,ri表示为:<d=di∧role=rolei∧op=opi∧ob=obi>,其中di∈D,rolei∈R,opi∈OP,obi∈OB;每条规则中包含多个条件,每个条件间用∧相连,每个条件由一个键值对组成,d表示部门、role表示角色、op表示操作、ob表示对象,其中部门条件为非必要条件;
(2).构造二叉树数据结构来存储访问控制策略,具体方法是:
步骤(2-1).将策略集P、部门集D、角色集R、对象集OB作为输入,生成一个根节点,为该节点构造集合S={R∪D∪OB};
步骤(2-2).统计集合S中每个值在P中出现的次数,选择出现次数最多的值,将其对应的键值对作为初始节点的标签;当有多个值出现次数相同时,则随机选择其中的一个,其对应的键值对作为当前节点的标签;
步骤(2-3).根据当前节点标签中的键值,对在P中查找包含该键值对的规则,重新构造两组策略Py和Pn,Py为包含该键值对的规则的集合,Pn为Py的补集;接着构造集合Sy和Sn,Sy为S集合中在Py里出现过的值的集合,Sn为S集合中在Pn里出现过的值的集合,同时在Sy中将步骤(2-2)中所选的值删除;
步骤(2-4).为当前节点生成两个分支Y和N,并根据{Py,Sy}和{Pn,Sn}生成两个新节点,这两个新节点分别对应分支Y和N;
步骤(2-5).对于每个新生成的节点,递归调用步骤(2-2)~(2-4),直到新节点的策略集P中只包含一条规则ri时,用rule=ri作为该节点的标签,为当前新生节点生成两个分支Y和N,同时生成两个叶子节点,两个叶子节点的标签分别为ACCEPT和DENY,将标签为ACCEPT的叶节点添加到分支Y,将标签为DENY的叶节点添加到分支N;
(3).基于构造完成的二叉树对访问请求进行查询匹配:在系统中,一条访问请求表示为:qi:<u=ui∧d=dqi∧role=roleqi∧op=opqi∧ob=obqi>,其中ui∈U,dqi∈D,roleqi∈R,opqi∈OP,obqi∈OB;每条请求中包含若干条件,每个条件间用∧相连;每个条件由一个键值对组成,u表示用户,d表示部门,role表示角色,op表示操作,ob表示对象,其中部门条件为非必要条件;当且仅当访问请求中除用户u以外的条件与P中任意一条规则完全匹配时,该访问请求才为合法请求;
(4).匹配二叉树的具体方法为:
步骤(4-1).从根节点开始,查看当前节点的标签,若标签中的键值对在访问请求中出现,则进入分支Y,否则就进入分支N;
步骤(4-2).查看与当前分支下连的节点的标签,若标签中的键值对在访问请求中出现,则向下进入当前节点的分支Y,否则就向下进入分支N;
步骤(4-3).重复步骤(4-2),直到当前分支下连的节点标签的键为rule时,将集合S中的值以及节点标签所对应的规则ri中op条件的值与访问请求相匹配,任意一项不匹配就向下进入分支N,否则向下进入分支Y;返回当前分支对应叶子节点的标签,即返回匹配结果,ACCEPT标签代表接受,DENY标签表示拒绝。