RBAC权限管理模型在油田管理系统中的应用
2017-03-13
作者:陈宫浩1,卿粼波1,滕奇志1,张余强2
来源:2017年微型机与应用第2期
陈宫浩1,卿粼波1,滕奇志1,张余强2
(1.四川大学 电子信息学院 图像信息研究所,四川 成都 610065; 2.成都西图科技有限公司,四川 成都 610065)
摘要:油田实验数据作为勘探、开发、油藏评价等各个科研领域必不可少的研究资料,其重要性可见一斑,保护油田实验数据的安全性具有重要的战略价值和现实意义。为有效管理科研人员对油田实验数据的查看和使用,通过分析权限控制在油田信息管理系统中的发展现状,结合ASP.NET MVC、jQuery easyUI以及RBAC访问控制模型,介绍了一套完整的油田权限管理系统的实现方法,主要包括系统架构和技术实现,旨在促进权限控制在数字化油田中的发展。
关键词:ASP.NET MVC;基于角色的权限控制模型;油田实验数据
中图分类号:TP399文献标识码:ADOI: 10.19358/j.issn.1674-7720.2017.02.026
引用格式:陈宫浩,卿粼波,滕奇志,等.RBAC权限管理模型在油田管理系统中的应用[J].微型机与应用,2017,36(2):87-89,95.
0引言
*基金项目:国家自然科学基金(00000000);国家高技术研究发展计划(863计划)(2008AA000000)随着HTML5技术的发展与推广,基于B/S架构的数据管理系统得到了充分的应用。在油田信息管理系统的建设中,由于油田信息数据量大、种类繁多,加之网络环境的开放性,在提高工作效率的同时,如何有效地保护数据、分配权限、保证国家油田实验数据的安全成为了关注的焦点,相关的探讨和应用正在不断发展。如李琛、李宇峰等人提出的USB加密狗技术,不仅给出了身份认证和权限设定的实现办法,而且对软硬件结合的加密模式做了探讨[1]。又如张琴等人提出的安全插件技术,探讨了对油田数据库的访问控制,在保障访问安全的同时,又记录了用户对数据库的操作[2]。本文结合微软推出的ASP.NET MVC框架,采用基于角色的权限控制(RoleBased Access Control,RBAC)模型,以及面向切面编程(Aspect Oriented Programming,AOP)等技术,设计和实现了一个基于B/S架构的油田权限管理系统。
1系统总体框架
1.1MVC架构
以往基于B/S架构的管理系统常采用ASP.NET Webform框架进行开发,该框架封装了许多常用的控件,虽然方便了开发,但是不利于服务器端结构分层,在后期维护上成本过高,故本系统采用ASP.NET MVC 分层体系结构。
ASP.NET MVC从逻辑上可以划分为视图层、业务逻辑层和数据访问层。视图层采用jQuery easyUI框架,该框架可以提供简洁而强大的数据展示功能,视图层通过Ajax异步通信技术提交用户的请求到后台,后台控制器接收视图层传来的数据后立刻交给业务逻辑层的相应方法,然后对数据进行相应处理,比如验证数据的合法性、对原始数据进行封装以及构造JSON数组等,最后,由业务逻辑层调用数据访问层的方法对数据库进行增、删、改、查的操作。对数据库的操作采用的是ADO.NET技术。如果操作成功则经控制器以JSON数组的形式返回数据到视图层,或者直接在视图层提示用户操作结果。系统的总体框架图如图1所示。
1.2RBAC模型
RBAC的核心思想是在用户和权限之间增加一层角色映射。角色的引入来自于实际生产环境中的职务,具体职务代表着处理某些事物的权利[3]。在权限系统中角色可以理解为一定数量的权限的集合。权限映射到角色,角色再映射到用户,角色是连接权限和用户的桥梁。这种分层次的设计把权限分配的重点由用户转移到角色,大大简化了权限分配的复杂程度。RBAC访问控制模型如图2所示。
2关键技术实现
为实现系统管理员在浏览器上查看、编辑、修改、删除权限信息,本系统涉及的关键技术包括数据库设计、数据库存储过程的编写、面向切面编程、权限信息的展示和用户交互功能的编写。
2.1数据库设计
石油部门大多使用Windows操作系统,本系统为了与部署环境保持一致,采用与Windows操作系统兼容的SQL Server 2008数据库。RBAC模型最基本由4个数据表组成:用户信息表、部门信息表、角色表、权限表,在此基础之上,还需要创建两张中间表关联4个基本表。数据库的设计如图3所示。
AuthDepartment表是部门信息表,DID字段是AuthDepartment表的主键,唯一标识部门。ParentDID字段是父部门的ID,部门和父部门通过DID和ParentDID形成递归。
AuthUser表是用户信息表,UID字段是AuthUser表的主键,唯一标识用户,DID字段是AuthUser表的外键,该字段参照的完整性约束是AuthDepartment表的DID字段,标识了用户所属的部门ID。
AuthRole表是角色信息表,RID字段是AuthRole表的主键。
AuthPrivilege表是最底层的权限表,PrivilegeRoute字段存放的是管理系统各个页面的路由信息。
除此之外还创建了两张中间表AuthUserRole和AuthRolePrivilege。AuthUserRole连接着AuthUser表和AuthRole表,添加用户时向AuthUser表插入用户信息,同时向AuthUserRole表插入用户拥有的权限,删除用户时不仅要删除AuthUser表的记录,同时要删除AuthUerRole表中该用户所拥有的权限。通过AuthUserRole可以实现用户和角色之间多对多的关系。同理,AuthRolePrivilege表也是连接AuthRole表和AuthPrivilege表的桥梁,同样实现了角色和权限之间多对多的关系。
2.2存储过程的编写
AuthUserRole表存储了一个用户拥有的所有角色,在油田管理系统的使用过程中,一个工作人员往往有多个角色,故在创建AuthUserRole表时,设置AuthUserRole表的UID字段为外键,参照完整性约束为AuthUser表的UID字段,并设置为级联删除。当从AuthUser表中删除用户的同时,数据库根据用户的UID把AuthUserRole表中有相同UID的数据条目删除,也即删除了该用户的所有角色信息。
SQL Server数据库无法实现用户信息的级联添加和级联修改,故需要编写存储过程来保证用户信息的一致性[4]。添加用户角色时,需要使用游标,循环向AuthUserRole表插入角色数据。添加用户的存储过程的执行流程如图4所示。
与用户的添加、修改和删除类似,角色的添加、修改和删除不仅需要修改AuthRole表,同时还要修改AuthRolePrivilege表,对AuthRolePrivilege表的操作同样需要存储过程的控制。
2.3切面编程
用户在请求一个控制器(Controller)的方法(Action)前系统要先对用户的身份进行检查,如果用户具有执行操作的权限则放行,如果用户不具有执行操作的权限,则拦截用户的请求[5]。
ASP.NET MVC为系统开发人员提供了Action过滤器,Action过滤器是可以自定义的属性,用来标记添加Action方法之前或者Action方法之后的行为到控制器的Action方法中。Action过滤器是通过继承ActionFilterAttribute类来实现的一个Attribute类。ActionFilterAttribute 是一个抽象类,提供了OnActionExecuting和OnActionExecuted方法供开发人员重写。ActionExecutingContext类为OnActionExecuting方法提供了上下文信息,通过该类的RouteData属性可以获得用户请求的方法的路由信息。
在用户成功登录管理系统的同时,通过用户的ID查询出用户拥有的角色,再根据角色从AuthPrivilege表中取出权限,这里的权限指的是角色拥有的路由信息的集合。在执行用户请求控制器的方法前会先执行OnActionExecuting方法,在OnActionExecuting方法中判断用户的会话是否过期,如果会话过期就提示用户重新登录管理系统并重定向到登录页面。如果会话没有过期则利用ActionExecutingContext类取出请求的方法的路由信息,检查该路由信息是否包含在用户的路由集合里,如果包含,表明用户拥有对该方法的执行权限,对用户的请求放行;如果不包含,表明用户没有对该方法的执行权限,不允许用户执行该方法。该功能的程序流程如图5所示。
3功能测试
选择用户部门批量处理可以批量地修改用户的部门信息,该功能如图6所示。同理选择用户角色批量处理可以批量地修改用户的角色信息,该功能如图7所示。
4结论
本文针对数字化油田信息管理系统的数据安全和访问控制需求,制作了一套基于B/S架构的权限管理系统。本系统采用RBAC权限模型来实现对权限的高效管理;使用ADO.NET组件访问SQL Server数据库。为了保证数据的安全性,服务器端的程序必须对用户提交的内容做检查;为了保证数据的一致性,数据库采用存储过程的方式修改数据表。
本系统有效地解决了不同身份的工作人员对油田管理系统的访问控制,保证了油田数据的安全性。
参考文献
[1] 李琛,李宇峰,陈祥光. 油田过程信息管理系统身份认证与权限设定方法[J].微计算机,2007,23(9):37-38.
[2] 张琴,徐品品,杨国栋.长庆油田勘探开发数据库安全系统分析与应用[J].信息技术与标准化,2012(1):61-62.