- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于角色访问控制的用户权限管理
0 基于角色的权限管理
基于角色的访问控制(rbac)是大多数大规模应用程序系统中使用最多的用户权限管理方法之一。RBAC的基本思想是,应用系统中的各种操作权限不是直接授予具体的用户,而是在用户与权限之间引入一个角色中介实现两者的逻辑分离。每一种角色对应着一组权限,一旦用户被分配了某角色后,该用户就拥有了此角色的所有权限。因此,系统管理员不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色就可以了,而且角色的权限变更比用户的权限变更要少得多,这样将大大简化用户的权限管理工作,减轻了系统管理员的工作负担。
虽然基于角色的访问控制方法给用户授权管理带来了灵活性和简单性,但是当把其具体应用到实际大中型应用系统时,便发现会存在这样的问题:由于应用系统用户、角色和权限数量很多,而且用户和角色之间、角色与角色之间、角色和权限之间还存在很复杂的关系以及各种各样的约束。判断用户是否具有某个操作权限可能是一个复杂的递归查找过程,需要连接数据库,进行大量比较耗时的数据查询操作,而且即使用户每次访问相同的资源,也要重复同样的查权过程,这将严重影响系统的查权速度。因此,文章提出在传统的基于角色访问控制方法中引入缓存策略进行改进,以解决系统查权速度慢的问题。
1 基于缓冲策略的rbac模型
1.1 判断用户是否具有某权限
一个传统的RBAC模型实例如图1所示。当判断用户U是否具有某个操作权限P时,可以根据RBAC模型中的用户角色指派关系(User Assignment,简称UA)、角色权限指派关系(Permission Assignment,简称PA)和角色间的层次关系(Role Hierarchy,简称RH)进行具体判定。例如,判断用户U1是否具有权限P1。从图中的用户角色指派关系中可以看出,U1直接拥有角色R1,而R1具有权限P1,在RBAC中,用户拥有某角色就拥有该角色的全部权限。因此,只要查询角色R1是否包含有权限P1就可判定用户U1是否具有权限P1了。又如,判断用户U2是否拥有权限Pm。从图中的用户角色指派关系和角色层次关系中可以看出,U2拥有的直接角色是R2,而R2的直接下层角色是R5,R5的直接下层角色是R8,R8才直接拥有权限Pm。在具体查权操作时,必须逐层往下搜索,根据RBAC中的上层(父)角色拥有下层(子)角色的全部权限的原则,直到搜索到R8时才能根据R8中是否拥有权限Pm来判定用户U2是否间接具有权限Pm。这里只是一个简单实例,实际应用系统的查权过程可能还要比这复杂得多。从传统的RBAC查权过程中可以看到,判断用户是否具有某权限要靠查找存储在数据库中的RBAC的UA、RH和PA关系并生成相应的权限数据以进行判定。由于数据库中没有存储任何用户和权限间的直接关系,每次用户访问应用系统进行查权时生成的权限数据和判断结果在当次使用完后就丢弃了,当该用户下次再登录时,即使是访问跟上次完全相同的系统资源也要重新生成权限数据然后再进行判定。这种查权方式对系统的运行速度影响比较大。
1.2 采用数据安全的方法,将其直接安装在数据库中
通过上面对传统RBAC的查权过程的分析可以看到,造成查权速度慢的主要原因就是每次登录应用系统时,都要搜索存储在数据库中的UA、RH和PA关系并且重新生成权限数据再进行匹配判断,即使是用户以前访问过的资源亦是如此。要解决这个造成查权速度慢的问题,就必须采取相应的方法,尽量避免用户每次登录系统时都要重新生成权限数据和进行判断。
针对这个问题,文章对传统的RBAC查权方法进行了一定的改进,采用直接缓存部分用户常用权限数据的策略:用户第一次访问应用系统时,由于数据库中还没有该用户访问资源的权限数据记录,这时必须使用数据库中存储的UA、RH和PA关系生成该用户的本次访问所需的权限数据,并把权限数据装载到速度很快的本地机内存中,当用户需要查权时,直接到本机内存中查找。另外,由程序把本次该用户的查权结果自动保存到数据库的权限缓存表中。当该用户在下次再访问时,先搜索数据库的权限缓存表,把该用户上次缓存的权限数据直接载入内存中。如果用户访问的是上次访问过的资源,则直接到本机内存读取其权限数据进行相应的控制;如果是该用户没有访问过的资源,由于在本机内存中没有其缓存的权限数据,这时才进行比较耗时的连接和查询数据库操作,根据存储的UA、RH和PA关系,按照传统方法生成该用户的权限数据,载入内存,并进行缓存,除供本次查权使用之外,也为下次用户的查权做好准备。由于尽量减少了用户每次查权时连接、查询数据库的次数以及生成权限数据的时间,所以查权速度也相应得到了一定的提高。
但是,随着用户使用应用系统的次数越来越多,数据库中的用户缓存权限数据也会越来越多。如果每次都把用户所有的缓存数据都从数据库查询出来再
文档评论(0)