[工学]访问控制课程设计实验报告_第1页
[工学]访问控制课程设计实验报告_第2页
[工学]访问控制课程设计实验报告_第3页
[工学]访问控制课程设计实验报告_第4页
[工学]访问控制课程设计实验报告_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、访问控制课程实验报告课 程 设 计 报 告科目: 访问控制 院系名称: 计算机科学与技术 专业班级: 信安1001班 学 号: u201014627 姓 名: 江 雪 指导教师: 汤学明 崔永泉 骆婷 报告日期: 2012.5.25 计算机科学与技术学院目 录第一部分 自主访问控制dac4一、 实验目的4二、 实验题目及要求4三、 实验原理43.1 自主访问控制定义43.2 自主访问控制的矩阵模型53.3 授权管理方式63.3.2 分散式授权管理模式73.4 数据库访问技术7四、 实验环境8五、 实验设计85.1 程序主要功能模块85.2 数据库操作85.3 设置系统管理模式105.4 用户管

2、理115.5 客体管理125.6 权限管理17六、 实验结果176.1 管理员身份登录176.2 普通用户登录20第二部分 基于rbac1的访问控制32一、 实验目的32二、 实验题目及要求32三、 实验原理323.1 基于角色的访问控制323.2 rbac1模型33四、 实验环境34五、 实验设计345.1 程序主要功能模块345.2 数据库操作355.3 角色管理355.4 权限管理39六、 实验结果406.1 系统管理员登录系统406.2 设置主体416.3 创建角色426.4 建立角色层次关系436.5 角色权限配置446.6 主体角色配置456.7 主体u1登陆系统456.8 插入角

3、色466.9 删除角色47实验体会49参考文献49第一部分 自主访问控制dac1、 实验目的 1、通过大型作业,使学生进一步熟悉访问控制的概念和基本原理; 2、培养学生将访问控制的各种技术和方法应用与实际进行实施的能力; 3、要求学生运用访问控制基本原理和方法结合实际充分发挥自主创新能力进行各有特色的设计。2、 实验题目及要求要求设计若干人及对话界面,通过这些界面定义和配置主体、客体以及权限,然后对主体进行自主授权、传递授权的操作,并能撤销授出的权限。修改主体对客体的访问权限后,观察系统访问成功和不成功的情况是否符合安全策略。3、 实验原理3.1 自主访问控制定义自主访问控制是指对某个客体具有

4、拥有权(或控制权)的主体能够将对该客体的一种访问权或多种访问权自主地授予其它主体,并在随后的任何时刻将这些权限回收。 自主访问控制保证系统资源不被非法访问,是一种有效手段,以保护用户个人资源的安全为目标,以个人的意志为转移,这种自主性满足了个人的安全需求为用户提供了灵活性,但对系统安全的保护力度是相当薄弱的。3.2 自主访问控制的矩阵模型 系统状态用一个有序三元组表示q=(s,o,a), 其中s主体的集合 o客体的集合 a访问矩阵,行对应于主体,列对应客体设s=s1,s2,o=m1,m2,f1,f2,s1,s2 表 3.1 自主访问控制矩阵m1m2f1f2s1s2s1r,w,erc,r,ws2

5、rr,w,ec,r,e 矩阵是动态增大的:创建一个客体就增加一个列 进来一个主体就增加一个行 例如:原表项为:表 3.2 自主访问控制原表m1m2f1s1r,wra,es2rr,w,a 增加客体f2后的自主访问矩阵变化为:(假设主体s1、s2对客体f2没有关联)。表 3.3 增加客体f2m1m2f1f2s1r,wra,es2rr,w,a 增加主体s3后的自主访问矩阵变化为:(主体s3只对客体f2有r,w,a的权限)。表 3.4 增加主体s3m1m2f1f2s1r,wra,es2rr,w,as3r,w,a 回收权限的情况,状态本身也在变化。原来的自主访问矩阵为:表 3.5 自主访问控制原表m1m

6、2f1s1r,wra,es2rr,w,a收回主体s1对客体m1的写访问权,及收回主体s2对客体m2的写访问权后,访问控制矩阵见表4.6。表 3.6 回收权限 m1m2f1s1rra,es2rr,a 由以上分析可知,存储结构是一个大稀疏矩阵。3.3 授权管理方式3.3.1 集中式授权管理模式一个主体si在创建某个客体oj后,该主体就获得了对这一客体的c权和其它所有可能权限。c权意味着可以将它对oj所有其它(除c权以外)的访问权限授予系统中任何一个主休,也可以撤销系统中任何主体对oj的其它访问权限。其它主体因为对oj不具有c权,因此即使他们对oj具有某些访问权限,但它们也无权将这些权限转授给别的主

7、体、或撤销别的主体对oj的任何访问权限在这种管理模式下,对于任一客体oj,哪些主体可以对其进行访问,可以进行什么样的访问,完全由oj的拥有者决定。3.3.2 分散式授权管理模式 在分散式管理模式下,客体的拥有者不但可将对该客体的访问权授予其它客体,而且可同时授予他们对该客体相应访问权的控制权(或相应访问权的授予权)。 (1)允许传递授权; (2)当一个主体撤销它所授予的对某个客体的某种访问权限时,必须将由于这一授权而引起的所有授权都予以撤销。3.4 数据库访问技术自主访问控制系统是在数据库的基础上建立的,其中涉及到对数据库的操作,本实验中对数据库的操作是借助于linq技术实现的,本实验使用的数

8、据库是sql sever。 linq(language integrated query)是visual studio 2008中的领军人物。借助于linq技术,我们可以使用一种类似sql的语法来查询任何形式的数据。目前为止linq所支持的数据源有sql server、xml以及内存中的数据集合。开发人员也可以使用其提供的扩展框架添加更多的数据源,例如mysql、amazon甚至是google desktop。 在本程序中,数据源采用的是sql server。linq包括五个部分:linq to objects、linq to datasets、linq to sql、linq to enti

9、ties、linq to xml。 在本实验中使用的是linq to sql组件。linq to sql 是 .net framework 3.5 版的一个组件,提供了用于将关系数据作为对象管理的运行时基础结构。 在 linq to sql 中,关系数据库的数据模型映射到用开发人员所用的编程语言表示的对象模型。当应用程序运行时,linq to sql 会将对象模型中的语言集成查询转换为sql,然后将它们发送到数据库进行执行。当数据库返回结果时,linq to sql 会将它们转换回可以用自己的编程语言处理的对象。4、 实验环境操作系统:windows 7编程工具和语言:microsoft vi

10、sual studio 2010 c#5、 实验设计5.1 程序主要功能模块程序主要功能模块如图5.1所示。图5.1 程序主要功能模块图5.2 数据库操作 1.创建新的sql server数据库,选择本机的服务器,输入新数据库名称accessdata,结果如图5.2所示;图 5.2 创建新的数据库2.创建数据库accessdata中要存放的表。自主访问控制系统的数据库中主要是用到了以下四张表: (1)objects表 存放客体信息 (2)rights表 存放主体对客体的权限(3)rights_give表 存放授权信息(4)users表 存放主体(用户)信息创建成功后如图5.3所示;图 5.3

11、成功创建数据库表3.为accessdata数据库创建dbml文件dac.dbml,并将所创建的表均添加到dac.dbml文件中,创建一个有关所有表的实体类,如图5.4所示;图 5.4 dac.dbml文件4.创建accessdata数据库的数据上下文类的实例dc;5.创建查询语句查询表中数据,将其中符合查询条件的数据返回指定变量中。5.3 设置系统管理模式设置系统管理模式是通过系统管理员在登录系统时进行选择设置的,默认的管理模式是集中式管理,如果是普通用户进行登录,可看到系统的可选择管理模式,但是却不能设置系统的管理模式。这部分功能的实现主要是通过在program.cs文件中建立了一个类cur

12、rentuser,用来传递相关的当前用户的信息。类currentuser的定义如下:public class currentuser public string username; public string password; public string rule; public int groupid; public int flag=0; /当flag为0,表示集中式管理,当flag为1,表示分散式管理,默认为集中式管理 public void setusername(string str) username = str; 其中,username可向多个子窗体结构传递当前使用系统的用户的

13、用户名,flag可向多个子窗体结构传递当前系统设定的管理模式,当flag为0,表示集中式管理,当flag为1,表示分散式管理,便于在后面的多个子窗口中进行调用。5.4 用户管理这一部分主要实现的是系统管理员登录系统后,对用户信息进行管理,具体可分为添加用户,删除用户,修改用户名和用户密码,如果用户要进行修改自己的用户名和用户密码,则需要向管理员申请。5.4.1 添加用户添加用户即是向数据库中的users表添加一项,管理员登录系统后,设定新加用户的用户名,密码,用户组后,便可向数据库中的users表添加一项。具体实现过程:(1)首先创建dacdatacontext数据库的数据上下文类的实例dc,

14、表达式为 dacdatacontext dc = new dacdatacontext(); (2)首先新建一个users表的变量con; (3)通过查询语句判断表中是否已经存在该用户名;如果存在则提醒管理 员系统中已经存在该用户,否则进行第4步;(4)对变量con的各个属性进行赋值, con.password = textboxpwd.text; con.user = textboxuname.text; con.groupid = int.parse(textboxgroupid.text);(5)将con变量插入数据库,表达式为db.users.insertonsubmit(con);(

15、6)更新数据库,表达式为db.submitchanges();(7)更新用户管理信息窗体结构中显示的所有的用户信息,添加成功则可 在用户管理信息窗体结构中看到新添加的用户信息。5.4.2 删除用户删除用户即是删除数据库中的users表中指定用户名的一项,管理员登录系统后,输入要被删除用户的用户名,密码,用户组后,便可删除数据库中的users表中的一项。具体实现过程: (1)首先创建dacdatacontext数据库的数据上下文类的实例dc,表达式为 dacdatacontext dc = new dacdatacontext(); (2)首先新建一个users表的变量con; (3)通过查询语

16、句判断users表中是否存在要被删除的用户名;如果不存在则提醒管理员系统中不存在该用户,否则将找到的用户信息对应的项赋给con,进行第4步; (4)删除users表要被删除的主体信息,表达式为 db.users.deleteonsubmit(con); (5)通过查询语句查找objects表中该主体创建的所有客体,删除objects表中该主体创建的所有的客体信息; (6)通过查询语句查找rights表中与该主体相关的权限信息,删除rights表中该主体所有的权限信息; (7)通过查询语句查找rights_give表中与该主体相关的授限信息,删除 rights_give表中该主体所有的授权信息;

17、 (8)更新数据库,表达式为db.submitchanges();5.5 客体管理5.5.1 创建客体创建客体即是向数据库中的objects表添加一项,普通登录系统后,设定新加客体的客体名,客体内容后,便可向数据库中的objects表添加一项。具体实现过程: (1)首先创建dacdatacontext数据库的数据上下文类的实例dc,表达式为 dacdatacontext dc = new dacdatacontext(); (2)首先新建一个objects表的变量obj; (3)通过查询语句判断objects表中是否已经存在要添加的客体的客体名; 如果存在则提醒用户系统中已经存在该客体,否则进

18、行第4步; (4)对变量obj的各个属性进行赋值, obj.objectname = this.textbox_objname.text; obj.objectdata = this.textbox_objdata.text; obj.owner = str; (5)将obj变量插入数据库中的objects,表达式为 db.objects.insertonsubmit(obj); (6)更新数据库,表达式为db.submitchanges(); (7)更新当前用户的客体管理信息窗体结构中显示的所有的客体信息,添加 成功则可在客体管理信息窗体结构中看到新添加的客体信息。5.5.2 查看客体当前用

19、户想要查看某客体的内容时,如果当前用户具有查看该客体的权限时,则可以进行查看该客体,否则系统拒绝该用户的请求。具体实现过程:通过匹配用户输入的客体名,查询rigths表中是否存在当前主体对该客体的权限,如果不存在则提醒用户不能查看该客体,否则显示客体的内容。5.5.3 编辑客体当前用户想要编辑某客体的内容时,如果当前用户具有编辑该客体的权限时,则可以进行编辑该客体,否则系统拒绝该用户的请求。具体实现过程:通过匹配用户输入的客体名,查询rigths表中是否存在当前主体对该客体的w权限,或者是否存在当前主体对该客体的o权限,即当前主体是否是该客体的创建者,如果不存在则提醒用户不能编辑该客体,否则可

20、以编辑客体的内容。5.5.4 删除客体当前用户想要删除某客体,只有客体的创建者才能删除该客体,如果当前用户是该客体的创建者,则可以删除该客体,否则系统拒绝该用户的请求。具体实现过程:查询rigths表中是否存在当前主体对该客体的o权限,即当前主体是否是该客体的创建者,如果不存在则提醒用户不能删除该客体,否则可以删除该客体。(1)判断当前主体是否是该客体的创建者;在删除客体时,与前面对客体的操作的处理不同的是,查看客体、编辑客体均是通过匹配用户输入的客体名在rights表中进行查找,而删除客体是通过获得选中行进行删除的。普通用户登录后,可以看到客体管理信息窗口,其中客体框是用datagridvi

21、ew实现的,客体框内显示的是当前用户可以操作的客体,用户在客体框内选中要删除的客体所在的行,由于该行中包括该客体的客体名以及当前用户对该客体的权限,程序便可获得该客体的客体名以及当前用户对该客体的权限。如果获得的权限字符串中包括o权,那么允许删除客体的操作,继续第2步,否则系统拒绝用户删除客体操作。(2)在objects表中删除该客体; (3)在rights表中删除所有主体对该客体的权限; (4)在rights_give表中删除对该客体的所有信息;(5) 提交更改到数据库, (6)更新客体管理信息窗口,更新权限管理窗口中当前主体可转授的权限和已转授的权限,更新主体管理信息,通过系统的提示或者查

22、看客体管理信息窗口、权限管理窗口和主体管理信息,均可发现是否已经成功删除客体。5.5.5 转授对客体的权限当前用户想要转授对某客体的某种权限,如果当前用户是该客体的创建者或者具有对该客体的控制权,则可以转授对该客体的某种权限,否则系统拒绝该用户的请求。具体实现过程: (1)判断当前系统管理模式是集中式管理还是分散式管理; 如果是集中式管理模式,则只允许客体的创建者转授对该客体的访问权,不可以转授对该访问权的控制权,如果是分散式管理,则用户可以同时转授对该客体的访问权和对该访问权的控制权。 (2)匹配用户输入的客体名,查找objects表中是否存在该客体,如果不存在,则系统会提示相应的错误信息,

23、否则继续第3、4步; (3)集中式管理模式下 判断当前用户是否是该客体的创建者,是则继续判断rights表中是否已经存在一项主键和被插入记录相同的记录,存在系统会提示相应的信息,否则在rights表中插入一条新的记录,如果当前用户不是该客体的创建者,则系统会提示相应的错误信息。 在rights_give表中插入一条新的记录; 提交更改到数据库; 更新权限管理窗口中可转授的权限信息。 (4)分散式管理模式下 通过匹配客体名,主体名,权限在rights表中进行查询当前用户是否对该客体的访问权限具有控制权,如果存在控制权则继续,否则系统会提示相应的错误信息; 判断rights表中是否已经存在一项主键

24、和被插入记录相同的记录,存在系统会提示相应的信息,否则在rights表中插入一条新的记录; 在rights_give表中插入一条新的记录; 提交更改到数据库; 更新权限管理窗口中可转授的权限信息。 (5)通过系统的提示信息,或者查看权限管理窗口中显示的可转授的权限信息,或者查看主体管理窗口中的信息均可判断是否成功转授权限。5.5.6 回收对客体的权限当前用户想要回收对主体的某种权限,如果当前用户是该客体的创建者或者具有对该客体的控制权,则可以回收对该主体回收对客体的某种权限,否则系统拒绝该用户的请求。具体实现过程: (1)判断当前系统管理模式是集中式管理还是分散式管理;如果是集中式管理模式,则

25、只允许客体的创建者回收主体对该客体的访问权,如果是分散式管理,则只要存在相应的授权信息,便可进行回收权限; (2)匹配用户输入的客体名,查找objects表中是否存在该客体,如果不存在,则系统会提示相应的错误信息,否则继续第3、4步; (3)集中式管理模式下 判断当前用户是否是该客体的创建者,如果当前用户不是该客体的创建者,则系统会提示相应的错误信息,如果当前用户是该客体的创建者,则继续; 删除rights表中被回收的主体对该客体的记录; 删除rights_give表中对应的记录; 提交更改到数据库; 更新权限管理窗口中已转授的权限信息。 (4)分散式管理模式下 通过匹配客体名,进行回收的主体

26、名,被回收的主体名以及权限在rights表中进行查询当前用户是否对对该主体转授了相应的权限,如果存在则继续,否则系统会提示相应的错误信息;下面举例说明回收权限的过程: 比如user1收回user2对object1的读权限 1) 先删除rights表中user2对object1的读权限(该权限由user1授予)记录; delete from rights where username=user2 and objectname=object1 and rights=r and whogiveme=user12)再删除rights_give表中的授权记录; delete from rights_gi

27、ve where username=user1 and object=object1 and rights=r and touser=user2 3)查询rights_give表,看是否有其他用户授予user2相同的权限,即对 object1的读权限,如果有记录,则停止权限回收; select * from rights_give where object=object1 and touser=user2 and rights=r 4)查询rights_give表,看user2是否将该权限转授给别人,如果无记录, 停止权限回收,否则转第1步继续。 select * from rights_gi

28、ve where object=object1 and username=user2 and rights=r (5)通过系统的提示信息,或者查看权限管理窗口中显示的已转授的权限信息,或者查看主体管理窗口中的信息均可判断是否成功回收权限。这部分代码主要分为三部分,函数private void button_take_click(object sender, eventargs e)主要是判断当前的管理模式,然后选择调用函数;函数private void getback(string str0, string str1, string str2, string str3)实现的是集中式管理模式下

29、回收权限;函数private void getback_2(string str0, string str1, string str2, string str3)实现的是分散式管理模式下回收权限。5.6 权限管理主体对客体的权限信息主要是显示在主体管理窗口,这部分又分为两个部分,一个是主体列表,一个是被选中的主体的权限信息。具体实现过程:(1) 主体列表使用的是listbox控件,通过遍历users表,将查询到的每一个主体的主体名添加到listbox控件中并显示出来;(2) 显示被选中的主体的权限信息使用的是datagridview控件,当选中主体列表中某一行的主体时,在被选中的主体的权限信息

30、框中便会显示出有关该主体的所有权限信息。这部分主要就是通过单击listbox控件某一行产生的响应事件来实现的。在响应事件中获得主体名,然后通过匹配主体名进行查询rights表,找出该主体的所有权限信息,并将查找到的项作为datagridview控件的数据源,便可成功显示选中主体的所有权限信息。6、 实验结果6.1 管理员身份登录运行程序,使用管理员身份登录,这时系统将默认管理模式为“集中式管理”。如图6.1所示:图6.1 管理员登录登录成功后可看到,数据库中已经建立了user1,user2,user3三个主体,当前管理模式是集中式管理,还可以继续添加用户和删除用户。如图6.2所示。图 6.2

31、用户管理信息6.1.1 添加用户 输入想要添加的用户的名字和密码,即可添加用户,如图6.3所示,成功添加用户uesr4。图6.3 添加用户成功 如果添加的用户在数据库中已经存在,那么系统会提示该用户已经存在,添加失败,如图6.4。图6.4 添加用户失败6.2.1 删除用户 用鼠标选择想要删除的用户,点击“删除用户”,就可以将该用户从数据库中删除。如图6.5所示。图6.5 删除用户6.2 普通用户登录输入用户名user1和密码,选择普通用户登录,如图6.6所示。这时我们可以选择两种管理方式:集中式管理和分散式管理,我们将在下面一一演示。图6.6 普通用户登录登陆后可以看到,目前我们还没有创建任何

32、客体,如图6.7所示。图6.7 初始客体信息表6.2.1 集中式管理模式下的权限管理 创建和删除客体当前用户创建客体obj1,如图6.8。用户可以创建多个客体,用户创建的所有客体都将显示出来,并且可以通过“查看客体”进行查看。图 6.8 创建客体 当前用户删除客体obj11,如图6.9、图6.10。图 6.9 确认是否删除客体 图 6.10 删除客体成功 权限管理权限管理页面分为可转授的权限和已转授的权限,结合上述操作,当前用户user1已经创建了客体obj1,那么便可转授对客体obj1的访问权限。下面user1将对obj1的读权限转授给user2,对obj1的写权

33、限转授给obj3。图 6.11 成功转授对obj1的读权限 由于当前管理模式是集中式管理,不能转授对访问权限的控制权。图 6.12 集中式管理模式下转授控制权失败 由下图可知,user2获得了对obj1的读权限,user3获得了对obj1的写权限。图 6.13 成功授权下面检测user2和user3是否真正获得了对应的权限。user2登录系统,并且读取客体obj1,由下图可知,user2读取客体obj1成功。图 6.14 user2成功读取客体obj1user2尝试编辑客体,但由于user2不具有对obj1的写权限,故此操作失败。图 6.15 user2编辑客体obj1失败user3登录系统,

34、并且读取客体obj1,由下图可知,user3读取客体obj1成功,同时也可以判断上一步操作中user2对obj1的修改失败。图 6.16 user3成功查看客体obj1user3尝试编辑客体,由于user3具有对obj1的写权限,故此操作成功。图 6.17 user3成功编辑客体obj1 user1登录系统,可查看obj1是否真正被修改了,由下图可知,obj1的确已经被user3修改了。图 6.18 user1查看obj1是否真正被修改user1回收user2对obj1的读权限以及user3对obj1的写权限。图 6.19 user1成功回收user2对obj1的读权限user1只对user3

35、授予了对obj的w权,如果要回收user3对obj1的读权限,系统会提示错误信息。图 6.20 user1回收权限失败user1成功回收user3对obj1的写权限后,可由权限管理窗口的已转授的权限信息为空判断出以上回收权限的操作的确成功。图 6.21 user1回收权限成功6.2.2 分散式管理模式下的权限管理 转授权限普通用户user1,user2,user3,user4分别登录系统,并且分别创建客体obj1,obj2,obj3,obj4。然后user1将对obj1的w权限授予了user2,同时授予了user2对w权限的控制权。user2又将对obj1的w权限授予了user3

36、,并允许user3再授权,user3又将对obj1的w权限授予了user4,并允许user4再授权,user1又将对obj1的w权限授予了user4,但是没有授予user4对w权限的控制权。上述授权过程可用有向图6.22表示。图 6.22 对obj1的访问权限的转移 进行了以上授权后,通过主体管理窗口的信息判断授权是否成功,如图6.23、图6.24、图6.25、图6.26所示。图 6.23 user1的权限信息图 6.24 user2的权限信息图 6.25 user3的权限信息图 6.26 user4的权限信息 回收权限user1回收对user2的授权,则此时user2授予use

37、r3的权限及user3授予user4的权限也相应被撤销,虽然user4保留了直接由user1得到的写访问权,但是user4失去了对此访问权的控制权。图 6.27 user1成功回收了对user2的授权图 6.28 回收权限后user2的权限图 6.29 回收权限后user3的权限图 6.30 回收权限后user4的权限user3登录系统,尝试编辑客体obj1,但是由于user3对客体obj1的权限已经被回收了,所以操作失败,见图6.31。图 6.31 user3已经没有权限编辑客体obj1 下面user4登录系统,尝试转授对obj1的w权限,但是由于user3授予user4的w权限及控制权均已

38、被回收,user4直接从user1获得的权限并不具有控制权,所以操作失败,见图6.32。图 6.32 user4转授对obj1的w权失败第二部分 基于rbac1的访问控制1、 实验目的 1、通过大型作业,使学生进一步熟悉访问控制的概念和基本原理; 2、培养学生将访问控制的各种技术和方法应用与实际进行实施的能力; 3、要求学生运用访问控制基本原理和方法结合实际充分发挥自主创新能力进行各有特色的设计。2、 实验题目及要求 要求设计若干人机对话界面,通过这些界面定义和配置角色、角色层次、用户角色(授权与回收)、角色权限(有继承关系不用重定义)多对多关系,然后对主体的访问权限进行控制实验;进一步,修改

39、角色、角色层次、用户角色、角色权限多对多关系,重复先前的实验,然后比较访问控制结果。3、 实验原理3.1 基于角色的访问控制基于角色的访问控制的核心是引入了角色的概念,它使得操作权限不是直接授予用户而是授予角色,用户通过角色身份来获得的相应的操作权限。基于角色的授权方法相对于单个用户授权,大大地简化了授权的机制和管理,在用户的工作职务发生变化时,只要转换他的角色身份,而不需要对其重新授权。当机构设置发生变化时,如某个部门撤销,某些部门合并等也可以不修改应用程序,而只要修改角色与用户、角色与操作权限之间的配置关系即可。3.2 rbac1模型 rbac1在rbac0的基础上模型引入了角色层次的概念

40、。在rbac1模型中用偏序来描述角色之间的层次关系。在该偏序关系中,高级别的角色继承低级别角色的所有权限。因此,一个用户若是某高级别角色的成员,则隐含了他同时也是低级别角色的成员,反之则不然。3.2.1 rbac1模型定义 (1)u:表示用户集 r:表示角色集 p:表示权限集 s:表示会话集 (2)papr,是权限到角色的多对多的指派; (3)ua ur,是用户到角色的多对多的指派; (4)user: su,会话和用户的单一映射,user(si)表示创建会话si的用户; (5)roles: s2r,会话和角色子集的映射, roles(si)表示会话si对应的角色集合; roles(si) r|

41、 (user(si), r )ua (6)会话si具有的权限集 (7)rhrr,是集合r上的偏序关系,称为角色层次关系; (8)roles: s2r,是会话和角色子集的映射函数,但和rbac0略有不同, roles(si) r| $rr且(user(si), r )ua即会话si对应的角色集可以由建立该会话的用户所属的任何角色或低级角色组成。 (9)会话si所具有的权限即会话si所具有的权限是由roles(si)中的每一角色,以及与被这些角色所覆盖的低级角色相对应的权限组成的权限集。3.2.2 直接权限继承 一些角色继承模式通常使用术语角色来指代有名字的权限集合。这样,角色继承则是对权限子集的

42、引用(例如,如果r2所有的权限也都是r1的权限,那么就说 r1“继承”r2)。角色是独立于角色容器的存在而存在的。同样,用户和用户组也是分别管理的,将用户或组指派给角色也就是将角色定义的权限授予用户和组成员。3.2.3 权限和用户成员关系继承另一种继承模式使用术语角色来表示一种同时包含用户和权限的结构,在这种模式下,角色层次中的一个角色既在一方面代表权限集合,又在另一方面代表用户集合。处于角色层或其图表顶端的角色拥有更强大的角色权力,越接近图表底部的角色是越普遍的角色(例如,这些角色包含较少的权限和大量的用户)。将用户指派给角色,意味着将该角色的权限及其继承的其它角色的所有权限全部赋给该用户。

43、4、 实验环境操作系统:windows 7编程工具和语言:microsoft visual studio 2010 c#5、 实验设计5.1 程序主要功能模块 本程序的主要功能模块见图5.1。图5.1 程序功能模块图5.2 数据库操作数据库的相关操作和自主访问控制系统基本上是一样的,主要区别在于数据库表的不同。基于rbac1的访问控制系统的数据库中主要是用到了以下6张表。 (1)roles表 存放所有角色信息 (2)roles_roles表 存放角色层次关系 (3)rights表 存放所有的权限信息 (4)roles_rights表 存放角色权限配置关系 (5)users表 存放主体信息 (6

44、)users_roles表 存放主体所具有的角色信息5.3 角色管理5.3.1 创建角色 创建角色即是向数据库中的roles表添加一项,管理员登录系统后,设定新加角色的角色名后,便可向数据库中的roles表添加一项。具体实现过程:(1)首先创建rbacdatacontext数据库的数据上下文类的实例rb,表达式为 rbacdatacontext rb = new rbacdatacontext(); (2)通过匹配管理员要创建的角色名称进行查询,判断表中是否已经存在该角色名称;如果存在则提醒管理员系统中已经存在该角色,否则进行第3步;(3)设置角色的窗体是子窗体,能够从其父窗体中继承roles

45、表的变量ro,对变量ro的各个属性进行赋值, ro.role = textbox_role.text ; (4) 将ro变量插入数据库中的roles表,表达式为 rb.roles.insertonsubmit(fm2.ro);(5)更新数据库,表达式为db.submitchanges();(6)更新设置角色窗体结构中显示的可设置为上下级角色的所有的角色名称,添加成功则可在设置角色窗体结构中看到新添加的角色名称。5.3.2 建立角色层次关系在基于rbac1的访问控制系统中,管理员首先是创建所有的角色名称,这一部分只是简单的向数据库中的roles表中插入所有的角色信息,并没有涉及到角色层次的建立,

46、在建立了所有的角色名称后,管理员可选择其中的某些角色建立角色层次关系。根据rbac1模型的定义,用偏序来描述角色之间的层次关系。在该偏序关系中,高级别的角色继承低级别角色的所有权限。因此,一个用户若是某高级别角色的成员,则隐含了他同时也是低级别角色的成员,反之则不然。在本程序中,建立角色层次关系就是设置给角色的上级角色和下级角色,如果该角色没有上级角色,那么在角色层次关系中,该角色节点就代表根节点。设置上下级角色主要是通过下面两个函数来实现的。 private void bt_addhrole_click(object sender, eventargs e) /添加该角色的上级角色 priv

47、ate void bt_lrole_click(object sender, eventargs e)/添加该角色的下级角色添加该角色的上级角色的具体的实现过程: (1)首先创建rbacdatacontext数据库的数据上下文类的实例rb,表达式为 rbacdatacontext rb = new rbacdatacontext(); (2)通过匹配管理员当前正在建立的角色关系中的上级角色名称和下级角色名称,判断该角色关系是否已经建立,如果存在则提醒管理员系统中已经存在该角色层次关系,否则进行第3步; (3)设置角色的窗体是子窗体,能够从其父窗体中继承roles_roles表的变量rr,对变量

48、rr的各个属性进行赋值, rr.h_role = str; rr.l_role = textbox_role.text; (4)查询roles_roles表所有层次关系,判断已经建立的角色关系中是否存在以当前正在建立的角色层次关系中的上级角色为下级角色的层次关系,如果没有查找到,则说明当前正在建立的角色层次关系中的上级角色代表一个根节点,将rr的root属性设置为1,否则说明当前正在建立的角色层次关系中的上级角色不能代表一个根节点,将rr的root属性设置为0; (5)将rr变量插入数据库中的roles_roles表,表达式为 rb.roles_roles.insertonsubmit(fm2

49、.rr); (6)查询roles_roles表所有层次关系,判断已经建立的角色关系中是否存在以当前建立的角色层次关系中的下级角色为上级角色的层次关系,如果找到,说明这些被查找到的角色层次关系中的上级角色不能代表一个根节点,将其root属性修改为0; (7)设已经建立的角色层次关系结构中存在某个关系a和b,其中a为上级角色,b为下级角色,判断当前插入的角色c是否以a为上级角色并且以b为下级角色,如果存在这样的层次关系,那么就要删除原来已经建立的a和b之间的层次关系,避免形成环状层次关系; (8)更新数据库,表达式为rb.submitchanges();添加该角色的下级角色的具体的实现过程: 这部

50、分的实现过程基本和上面添加该角色的上级角色的实现是一样的,唯一区别是在添加该角色的上级角色中,当前正在添加的角色属于该角色层次关系中的下级角色,而在添加该角色的下级角色中,当前正在添加的角色属于该角色层次关系中的上级角色。5.3.3 绘制角色层次关系图在基于rbac1的访问控制系统中,角色层次关系可以用树形结构图进行形象的表示,所以在这部分的实现过程中,我采用的是treeview控件来实现的。具体实现过程: (1)清空treeview控件的所有节点信息并且设置treeview控件为可编辑状态; (2)遍历roles_roles表中的所有角色层次关系,查找其中root属性值为1且不重复的项,这些

51、项中的上级角色均作为树形图中的根节点; (3)对第二部中找到的所有根节点,依次调用函数 private void get_nodes(treenode node);即是通过递归查找该根节点下的每一条分支上的所有子节点,依次添加到treeview控件中的相应的节点中。在上面的函数中调用了递归函数get_nodes(node),该函数的参数为treenode类型,实现的是通过查询roles_roles表,判断是否存在以参数node的text属性值为上级角色名称的角色层次关系,如果存在,则建立以该角色层次关系中的下级角色为text属性值的树节点,并添加为node节点的下级节点,将新建的树节点继续作为

52、参数继续传递给函数get_nodes(node),不断递归查询,直到遍历完整个roles_roles表。5.3.4 删除角色系统管理员可以删除角色层次关系中的某个角色,需要注意的是在删除某个角色时,不仅仅是要删除该角色在角色层次中与其他角色的关系,还要把该角色的下级角色添加为该角色的上级角色的直接下级角色,比如说a是b的上级角色,b是c的上级角色,当删除角色b时,要将c添加为a的直接下级角色,即是在roles_roles表中添加新的一项,该项的上级角色是a,下级角色是c。具体实现过程: (1)首先创建rbacdatacontext数据库的数据上下文类的实例rb,表达式为 rbacdatacontext rb = new rbacdatacontext(); (2)通过匹配要删除的角色名称,在roles表中进行查询是否存在该角色,如果不存在提醒管理员系统中不存在该角色,否则进行第3步; (3)将roles表中查找到的要被删除角色对应的项删掉; (4)查询roles_roles表,找出被删除节点的所有上级节点; (5)查询roles_roles表,找出被删

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论