2.背景技术
计算机***,尤其是网络***,资源放在一起集中共享,这些资源可以是图片、数据库、文本、计算机等。当用户请求对某资源进行操作,为了确保***安全正常运行,***将对用户和资源进行权限判断,确保该用户对该资源有操作权限,否则拒绝用户请求。
权限管理,就是管理用户对资源的操作权限。目前应用最广泛的有两种技术方法:
1.基于角色的访问控制授权方法;
2.XACML(OASIS eXtensible Access Control Markup Language)。
基于角色的访问控制授权方法,先创建角色,然后授权该角色有权限访问的资源;将一个或者多个角色授权给用户。当用户访问某资源时,首先查找该用户有哪些角色,查找出这些角色对应的授权资源。如果授权资源里面有被访问资源,则允许用户请求;否则拒绝用户请求。比如创建管理员角色,授权管理员角色允许访问“添加机构”、“删除机构”网页资源权限。然后给用户张三授予管理员角色。当张三访问“添加机构”时,***将允许该请求。当张三访问“添加用户”时,因为张三具备的角色都没用被授予“添加用户”权限,***将拒绝该请求。
基于角色的访问控制授权方法是一种粗粒度的权限控制方法。对于细化的需求,基于角色的访问控制则无能为力。
比如在某银行***中,有总行用户张三和北京分行用户李四,现有访问控制需求:
1.总行管理员只能添加各个分行机构,不能添加支行机构
2.北京分行管理员只能添加北京分行下属支行,不能添加分行机构,且不能添加其他分行支行机构。
对于以上需求,基于角色的访问控制只能授予张三和李四管理员角色,赋予该角色添加机构的权限。但无法根据机构的不同层级的属性进一步授权,所以无法实现此类细粒度的访问控制。
XACML是OASIS的一个标准。XACML定义了一种通用的用于保护资源的策略语言和一种访问决策语言。
典型的访问控制和授权场景包括三个主要实体:主体(Subject)、资源(Resource)和动作(Action)以及它们的属性。主体请求得到对资源执行动作的权限。比如在访问请求“客户请求查看自己的订单”中,主体是“客户”,资源是“自己的订单”,动作是“查看”。
XACML的授权由策略(Policy)实现。策略中定义若干规则(Rule),规则指定允许或拒绝请求的条件。当主体请求访问资源时,XACML引擎会选择匹配的策略,评估与策略关联的规则。评估过程中,引擎会根据规则的定义对主体、资源以及运行环境(Environment)的属性进行计算和评估,最终做出允许或拒绝请求的决策。其步骤如图1。
由于XACML的规则支持对主体、资源以及环境的属性进行复杂计算与评估,所以具备了进行细粒度访问控制的能力。例如对于细粒度授权“分行管理员添加下属支行机构”,XACML需要创建一条授权策略。该策略包含的规则为:
1.主体为拥有“管理员”角色,且所属机构为分行;
2.资源为支行机构,且隶属于主体的分行;
3.动作为添加分支机构。
以上条件满足时,决策的结果为允许,反之拒绝。
在该规则中,参与评估的主体属性有“所拥有的角色”和“所属机构”;资源属性为“支行机构”和“隶属于主体分行”。
XACML其核心是为授权策略定义规则,在规则中对主体,资源和环境属性进行评估,根据评估结果做出访问控制决策(允许或拒绝)。目前IBM Tivoli Access Manager和OracleEntitlement Server都是采用这种思路来实现细粒度访问控制。
该方法并不完善,有以下两个缺点:
1.重用性不强
策略包含若干规则,不同的策略经常有类似的规则,但不完全相同。例如以下两个策略:
策略1:分行管理员添加下属支行机构。规则:主体的角色为管理员,且所属机构为分行;资源为支行机构,且隶属于主体的分行。
策略2:分行管理员添加分行用户。主体的角色为管理员,且所属机构为分行;资源为用户,且与主体属于同一分行。
策略1和策略2的规则中都包含了对主体的限制条件:主体的角色为管理员,且所属机构为分行。
2.不支持资源查询
对于“分行管理员有权修改下属支行机构”这一访问控制,XACML可以判断某管理员是否能够修改某支行机构,但不能返回该管理员有权修改的所有支行机构。因为XACML只能返回授权策略决策结果,即允许或拒绝,而不能进行资源查询,返回满足策略规则的资源集合。而在实际的应用***中,这种需求是随处可见的。XACML还不支持这类查询需求。其实用性受到限制。
5.具体实施方式
5.1.主体分类方法
主体分类方法:定义主体的分类规则,直接对给定主体的属性进行评估,从而判断主体是否属于该分类,而不用事先显示地将主体划入某分类。主体分类主要特征是:
1.动态匹配计算。通过评估规则判断主体是否属于该分类,而不用事先将主体划入分类,为细粒度授权提供了前提条件。
2.具有更好的复用性、可读性。XACML的主体判断规则和资源判断规则混合在一起。通过将主体判断规则提取出来,形成独立分类,这种分类与业务领域中的概念一致,具有很好的稳定性,可以在不同业务操作中复用。分类目的性和可读性更强。
主体分类规则的特征是由表达式或表达式组组成,并返回布尔值。表达式可以是数学计算(+,-,*,/)、逻辑计算(AND,OR)和函数等。表达式举例:
//数学计算int a=b+1;//逻辑计算boolean f=(a&&b)&&(c||d)&&e;//函数c=a.add(b.getValue()); |
表达式的特征是对主体的属性、上下文属性或其他数据源数据的计算。主体、上下文环境和数据源都是规则的输入参数。表达式获取值举例:
//主体的属性String organization=(String)SUBJECT.get(“organization”);//上下文属性Double money=(Double)CONTEXT.get(“money”);//执行SQL查询Collection queryResult=DATASOURCE.query(“select column1,column2 from tablename”); |
将主体、上下文环境和数据源做为输入参数,执行规则的表达式或表达式组,执行结果就是评估结果。
主体分类实施例1:
名称 |
规则 |
描述 |
总行用户 |
String organization =SUBJECT.get(“organization”);return organization.equals(“总行”); |
取出主体(用户)的organization属性值,然后和总行机构名称”总行”进行比较。相等表示属于总行用户分类,否则不是。 |
分行用户 |
Collection branches=DATASOURCE.query(“select name from |
查询organization表所有分行机构(父机构是”总行”),然 |
|
organizationwhere parent=’总行’“);String organization = SUBJECT.get(“organization”);return branches.contains(organization); |
后比较主体的机构是否在分行机构中。如果在,表示属于分行用户分类,否则不是。 |
5.2.资源分类方法
资源分类方法:定义资源的分类规则,直接对给定资源和给定主体(给定主体可选)的属性进行评估,从而判断资源是否属于该分类,而不用事先显示地将资源划入某分类。
资源分类方法与主体分类方法基本类似,主要有一个显著区别:资源分类输入参数为:资源、主体、上下文环境和数据源。而主体分类的输入参数没有资源。
资源分类规则、表达式、表达式取值和主体分类一致,不再重复。
资源分类实施例1:
名称 |
规则 |
描述 |
分行机构 |
String parent=RESOURCE.get(“parent”);return parent.equals(”总行”); |
取出资源的parent属性值,然后查看该机构是否为总行。如果是,表示属于该分类,否则不是。 |
当前主体的下属支行机构 |
Collection branches=DATASOURCE.query(“select name fromorganizationwhere parent=’总行’“);String organization =SUBJECT.get(“organization”);String parent=RESOUCE.get(“parent”);return branches.contains(organization)&&parent.equals(organization); |
取出请求主体的organization属性值,取出机构表中所有分行机构,取出资源的parent属性值。如果organization是分行机构,且parent和organization相等,表示属于该分类,否则不是。 |
5.3.数据查询方法
在不同场景,但查询语句非常类似的情况下,我们定制查询模板。在运行的时候,对模板中的占位符赋值,形成完整SQL语句,然后进行数据库查询。
运用于细粒度权限管理领域,数据查询占位符代表的数据,可以来自上下文、主体、资源或者数据源。
5.4.细粒度授权决策方法
基于主体分类和资源分类的细粒度授权决策方法,是一种简单、直观和实用的细粒度授权决策方法。
细粒度授权决策,为不同请求主体设置不同资源操作权限。对给定主体、给定资源,***能够通过计算,做出决策,允许或者拒绝该请求。
本方法为每个操作设定一条或者多条授权决策策略。如果有多条策略,策略按照优先级排序。
授权决策策略包括:
1.主体分类,描述什么样的主体;
2.资源分类,描述什么样的资源;
3.授权关系:允许或拒绝;
4.拒绝理由。
本方法工作原理是:当某个主体请求对某个资源进行操作时:
1.按照优先级顺序列出为本操作设置的授权决策策略,依次评估授权决策策略;
2.评估当前授权决策策略,如果请求主体满足该策略的主体分类规则,且请求资源满足该策略的资源分类规则,则该策略得出决策结果;否则该策略视为不能得出决策结果;
3.如果决策结果是允许,直接返回允许,不再评估下一条策略;如果决策结果是拒绝,直接返回拒绝,返回的拒绝理由就是当前策略的拒绝理由,也不再评估下一条策略;如果没有得出决策结果,返回到步骤2评估下一条策略,直到没有策略可供评估为止;
4.如果所有策略评估完毕,都不能得出决策结果,将拒绝做为决策结果,并评估出拒绝理由,然后返回拒绝理由。评估拒绝理由由以下步骤组成:
a)按照优先级顺序列出为本操作设置的授权决策策略,依次评估授权决策策略;
b)评估当前授权决策策略,如果请求主体满足该策略的主体分类规则,则选中该策略的拒绝理由;
c)返回到步骤b评估下一条策略,直到没有策略可供评估为止;
d)返回的拒绝理由就是所有选中的拒绝理由,返回的拒绝理由可能是0条、1条或者多条。
下面举例说明本方法的有效性。
细粒度授权决策方法实施例1:
某银行管理***,维护机构操作。细粒度权限控制要求是:
1.总行用户,可以维护所有分行机构,但不能维护分行下属支行机构;
2.分行用户,可以维护本分行下属支行机构,不能维护其他任意机构,比如其他分行下属支行,本分行机构等。
运用本细粒度授权决策方法,为维护机构操作,设置如下授权决策策略:
优先级 |
主体分类 |
资源分类 |
授权关系 |
拒绝理由 |
1 |
总行用户 |
分行机构 |
允许 |
总行用户只能维护分行机构 |
2 |
分行用户 |
本分行下属支行 |
允许 |
分行用户只能维护本分行下属支行 |
备注:
1.总行用户(主体分类),规则是:请求主体的机构等于总行机构;
2.分行用户(主体分类),规则是:请求主体的机构属于机构表中的查询出来的分行机构集合;
3.分行机构(资源分类),规则是:请求资源的父机构等于总行机构;
4.本分行下属支行(资源分类),规则是:请求资源的父机构等于请求主体的机构,且请求主体的机构是分行机构。
下面考察如下输入,决策结果如何:
输入 |
决策结果 |
说明 |
请求主体:总行用户张三请求资源:北京分行分行机构 |
允许 |
请求主体和请求资源满足优先级1的授权决策策略,返回该规则的授权关系 |
请求主体:总行用户张三请求资源:北京分行下属东单支行 |
拒绝。拒绝理由:总行用户只能维护分行机构 |
请求主体和请求资源不满足任何授权决策策略。但请求主体只满足优先级1的主体分类,因此该规则的拒绝理由,做为拒绝理由返回。 |
请求主体:北京分行用户李四请求资源:北京分行下属东单支行 |
允许 |
请求主体和请求资源满足优先级2的授权决策策略,返回该规则的授权关系 |
请求主体:北京分行用户李四请求资源:上海分行下属浦东支行 |
拒绝。拒绝理由:分行用户只能维护本分行下属支行 |
请求主体和请求资源不满足任何授权决策策略。但请求主体只满足优先级2的主体分类,因此该规则的拒绝理由,做为拒绝理由返回。 |
细粒度授权决策方法实施例2:
某企业客户关系***,维护客户操作。细粒度权限控制要求是:
1.普通销售人员,维护自己开发的客户;
2.销售部部门经理,维护所有客户;
3.被公司管理员列入黑名单的用户,不能维护任何客户。
运用本细粒度授权决策方法,为维护客户操作,设置如下授权决策策略:
优先级 |
主体分类 |
资源分类 |
授权关系 |
拒绝理由 |
1 |
黑名单用户 |
所有客户 |
拒绝 |
黑名单用户不允许维护任何客户 |
2 |
普通销售人员 |
自己开发的客户 |
允许 |
普通销售人员只能维护自己开发的客户 |
3 |
销售部部门经理 |
所有客户 |
允许 |
|
备注:
1.黑名单用户(主体分类),规则是:请求主体的ID属性属于黑名单表中查询出来的ID集合;
2.普通销售人员(主体分类),规则是:请求主体的机构属性是“销售部”,且请求主体的部门经理属性等于“否”;
3.销售部部门经理(主体分类),规则是:请求主体的机构属性是“销售部”,且请求主体的部门经理属性等于“是”;
4.所有客户(资源分类),规则是:不做任何判断直接返回true;
5.自己开发的客户(资源分类),规则是:请求资源的客户代表ID属性等于请求主体的ID属性。
下面考察如下输入,决策结果如何:
输入 |
决策结果 |
说明 |
请求主体:黑名单用户张三请求资源:张三开发的客户ABC |
拒绝 |
请求主体和请求资源满足优先级1的授权决策策略,返回该规则的授权关系 |
请求主体:普通销售人员李四请求资源:张三开发的客户ABC |
拒绝。拒绝理由:普通销售人员只能维护自己开发的客户 |
请求主体和请求资源不满足任何授权决策策略。但请求主体只满足优先级2的主体分类,因此该规则的拒绝理由,做为拒绝理由返回。 |
请求主体:普通销售人员李四请求资源:李四开发的客户EFG |
允许 |
请求主体和请求资源满足优先级2的授权决策策略,返回该规则的授权关系 |
请求主体:销售部部门经理王五请求资源:李四开发的客户EFG |
允许 |
请求主体和请求资源满足优先级3的授权决策策略,返回该规则的授权关系 |
基于主体分类和资源分类的细粒度授权决策方法,主要特征是:
1.基于主体分类方法和资源分类方法,直接描述出什么样的主体对什么样的资源,具有怎样的操作权限;
2.提供了一种较XACML更直观、更实用、更简便的细粒度控制方法;
3.主体分类、资源分类是业务域概念,因此主体分类、资源分类定义可以在授权决策策略中复用,提高了管理效率。
5.5.细粒度授权查询方法
细粒度授权决策方法,判断请求主体是否对请求资源具有操作权限,但不能告诉请求主体具有权限操作的资源有哪些。细粒度授权查询方法,是用来查询出请求主体对哪些资源具有操作权限。
基于主体分类和数据查询的细粒度授权查询方法,为不同请求主体设置数据查询器。数据查询器,可由本文5.3所描述的数据查询方法实现。对给定主体,***能够通过计算,选择匹配的查询器,进行资源查询。其查询结果即请求主体具有权限操作的资源集合。
本方法为每个操作设定一条或者多条授权查询策略。如果有多条策略,策略按照优先级排序。
授权查询策略包括:
1.主体分类,描述什么样的主体;
2.数据查询器,描述查询哪些资源。
本方法工作原理是:当某个主体请求查询操作时:
1.按照优先级顺序列出为本操作设置的授权查询策略,依次评估授权查询策略;
2.评估当前授权查询策略,如果请求主体满足该策略的主体分类规则,执行该策略的查询模板得到查询结果;
3.如果当前授权查询策略评估,得出查询结果,那么不必评估下一条策略;否则视为不能得出查询结果,发挥到步骤2评估下一条策略,直到没有策略可供评估为止;
4.如果所有策略评估完毕,都不能得出查询结果,返回空集合,即该请求主体没有查询数据权限。
下面举例说明本方法的有效性。
细粒度授权查询方法实施例1:
某银行管理***,查询机构操作。细粒度权限控制要求是:
1.总行用户,可以查询所有机构;
2.分行用户,可以查询本分行机构及本分行下属支行机构。
运用本细粒度授权决策方法,为查询机构操作,设置如下授权查询策略:
优先级 |
主体分类 |
数据查询器 |
1 |
总行用户 |
查询机构表所有数据 |
2 |
分行用户 |
查询机构表本分行及本分行下属支行数据 |
备注:
1.总行用户(主体分类),规则是:请求主体的机构等于总行机构;
2.分行用户(主体分类),规则是:请求主体的机构属于机构表中的查询出来的分行机构集合;
3.查询机构表所有数据(数据查询器),规则是:查询机构表所有数据;
4.查询机构表本分行及本分行下属支行数据(数据查询器),规则是:查询机构表数据,查询条件是机构号等于请求主体机构号,或者父机构号等于请求主体机构号。
下面考察如下输入,查询结果如何:
输入 |
查询结果 |
说明 |
请求主体:总行用户张三 |
机构表所有机构数据 |
请求主体满足优先级1的授权查询策略的主体分类,执行该规则的数据查询器,返回机构表所有数据 |
请求主体:北京分行用户李四 |
北京分行及北京分行下属支行数据 |
请求主体满足优先级2的授权查询策略的主体分类,执行该规则的数据查询器,返回北京分行及北京分行下属支行数据 |
请求主体:上海分行用户王 |
上海分行及上海分行下属支 |
请求主体满足优先级2的授 |
五 |
行数据 |
权查询策略的主体分类,执行该规则的数据查询器,返回上海分行及上海分行下属支行数据 |
细粒度授权查询方法实施例2:
某企业客户关系***,查询客户操作。细粒度权限控制要求是:
1.普通销售人员,查询自己开发的客户;
2.销售部部门经理,查询所有客户;
3.被公司管理员列入黑名单的用户,不能查询任何客户。
运用本细粒度授权决策方法,为维护客户操作,设置如下授权查询策略:
优先级 |
主体分类 |
数据查询器 |
1 |
黑名单用户 |
不查询任何客户 |
2 |
普通销售人员 |
查询客户表销售人员开发的客户 |
3 |
销售部部门经理 |
查询客户表所有客户 |
备注:
1.黑名单用户(主体分类),规则是:请求主体的ID属性属于黑名单表中查询出来的ID集合;
2.普通销售人员(主体分类),规则是:请求主体的机构属性是“销售部”,且请求主体的部门经理属性等于“否”;
3.销售部部门经理(主体分类),规则是:请求主体的机构属性是“销售部”,且请求主体的部门经理属性等于“是”;
4.不查询任何客户(数据查询器),规则是:查询客户表,查询条件是1=2。即查询结果总是空。
5.查询客户表销售人员开发的客户(数据查询器),规则是:查询客户表,查询条件是客户代表ID等于请求主体ID属性;
6.查询客户表所有客户(数据查询器),规则是:查询客户表所有数据。
下面考察如下输入,查询结果如何:
输入 |
查询结果 |
说明 |
请求主体:黑名单用户张三 |
空集合 |
请求主体满足优先级1的授权查询策略的主体分类规则,执行该分类的数据查询器,返回空集合 |
请求主体:普通销售人员李四 |
客户表,客户代表ID号等于李四ID的客户 |
请求主体满足优先级2的授权查询策略的主体分类规则,执行该分类的数据查询器,返回李四开发的客户 |
请求主体:普通销售人员赵六 |
客户表,客户代表ID等于赵六ID的客户 |
请求主体满足优先级2的授权查询策略的主体分类规则,执行该分类的数据查询器,返回赵六开发的客户 |
请求主体:销售部部门经理王五 |
客户表,所有客户 |
请求主体满足优先级3的授权查询策略的主体分类规则,执行该分类的数据查询器,返回所有客户 |
基于主体分类和数据查询的细粒度授权查询方法,主要特征是:
1.基于主体分类方法和数据查询方法,直接描述出什么样的主体对哪些资源具有查询权限;
2.解决了XACML等以往权限管理领域未涉及到的领域;
3.主体分类、数据查询器是业务域概念,因此主体分类、数据查询器定义可以在授权查询策略中复用,提高了管理效率。