1.背景 当今社会是一个信息爆炸的社会,因为信息科技人们生活发生了巨大的变化,以计算机技术为代表的应用及普及到经济和社会生活的各个方面。这是属于一个大数据的时代,数据库系统几乎在每个领域都发挥着重大作用,用于加强对大量信息的管理,方便了人们的生活。 在大学里学生成绩管理如果靠人力将十分麻烦,有必要设计一个成绩管理系统,为了加强系统的安全性,引入了基于角色的访问控制模型(RBAC),应用该模型可以使不同用户登陆后得到不同的访问权限,不具有某个权限的用户将不能操作该权限,从数据库层进行权限控制有利于提高系统易用性,可扩展性,健壮性以及安全性。本次课程设计就是要设计一个基于RBAC的成绩管理系统,要从底层对用户权限进行控制,而不是在应用层。 2.系统需求分析 2.1需求描述 该成绩管理系统基于RBAC技术,能够对大学里各学生的成绩进行管理。系统有三个角色,分别是学生,教师以及管理员,管理员的权限最大。 学生通过该系统可以查询到自己某个课程的成绩,以及选择某个老师的某个课程。 教师可以录入所教课程学生的成绩,但不能修改,如果要修改只能联系管理员修改,还有查询有哪些学生选了他的课。 管理员拥有所有权限,包括删除用户,给用户重置登录密码,对各表的记录进行删除,增加,修改等。 该系统在微软的SQL SERVER 2008上进行开发,操作系统环境为Windows 7,通过写好的存储过程在数据库层完成各种操作,从而实现成绩管理。 2.2系统功能结构 2.3数据流图 3.数据库设计 3.1全局E-R图 ER图包括两个部分,一个有关用户权限分配,一个有关学生的成绩管理。 3.2数据字典 3.3数据库内关系表定义 用户信息(用户ID,用户名,用户密码) 用户-角色(用户ID,角色ID) 角色(角色ID,角色名) 角色—权限(角色ID,权限ID) 权限(权限ID,动作,对象,表名) 学生成绩(学号,课程号,姓名,成绩) 选课(课程号,课程名,学号,教师号) 教师(教师号,姓名,课程号) 加下划线的表示为主键。 4.数据库实现 4.1关系表(及相关视图)创建SQL代码 建立系统注册成员的信息表,包括用户唯一的账号,密码,姓名: [crayon-69bbc4ca3baf9068315140/] 建立角色信息表: [crayon-69bbc4ca3bb02858451873/] 建立用户角色联系的表: [crayon-69bbc4ca3bb05474162619/] 建立角色权限联系的表: [crayon-69bbc4ca3bb07183308989/] 建立权限信息表: [crayon-69bbc4ca3bb08853676924/] 建立学生成绩表,包括学号,姓名,课程号,成绩: [crayon-69bbc4ca3bb0a450544852/] 建立教师表,包括教师号,姓名,课程名: [crayon-69bbc4ca3bb0c479719657/] 建立选课表: [crayon-69bbc4ca3bb0d244630560/] 建立临时表,用于存储某个用户的权限: [crayon-69bbc4ca3bb0f515317349/] 4.2存储过程、触发器等的创建SQL代码 用户注册: [crayon-69bbc4ca3bb10135027039/] 修改密码: [crayon-69bbc4ca3bb12848613791/] 用户角色分配: [crayon-69bbc4ca3bb13300899023/] 角色权限分配: [crayon-69bbc4ca3bb14476903143/] 删除角色某个权限: [crayon-69bbc4ca3bb16461955506/] 将某用户数据放入前面创建的一张临时表temp中,调用该存储过程可知用户有哪些权限: [crayon-69bbc4ca3bb18561363409/] 从临时表得到数据,判断用户是否有此权限: [crayon-69bbc4ca3bb1a329502431/] 安排教师教授某个课程,只有管理员有这权限 [crayon-69bbc4ca3bb1b435002595/] 学生选课: [crayon-69bbc4ca3bb1d880564783/] 往student表添加一行数据,即录入成绩,由前面的权限分配可知只有教师管理员有这权限: [crayon-69bbc4ca3bb1e770073273/] 往student表删除某行数据: [crayon-69bbc4ca3bb20985980587/] 删除某个用户: [crayon-69bbc4ca3bb21345139483/] 5.应用场景描述(SQL SERVER 2008模拟 在场景描述前我们先为该系统注册了三个用户,分别是张三(ID:1,学生),李四(ID:2,教师),王五(ID:3,管理员),角色信息表按如下初始化: [crayon-69bbc4ca3bb23533875287/] 根据上述权限信息,我们给学生,教师,管理员分配了各种权限,示例场景如下: 1)给老师安排某个课程: 假设李四的教师号为2,我们要给李四安排教学1号课程,用到的存储过程为procedure jiaoke。 首先让学生张三安排,执行exec jiaoke 1,2,'李四','1',得到结果: 消息提示该用户无此权限,同时左侧结果提示拥有的权限,避免盲目操作。 同理2号用户作为老师的李四执行也是相同结果,接着安排管理员,3号用户王五执行:exec jiaoke 3,2,'李四','1',得到结果: 2)学生选课: 我们要给张三安排课程,假设安排的是课程号为1,课程名为计算机,李四老师上的课,对于选课,只有学生,管理员有这权限。 首先张三选课,假设张三学号为111,执行: exec xuanke 1,1,'计算机',111,2,得到结果: 教师李四执行:exec xuanke 2,1,'计算机',111,2,结果为: 管理员执行时得到与学生相同的结果。 3)录入成绩 学生选完课后,就可以录入成绩了,此时只有老师管理员有此权限,首先让学生张三自己录入成绩,执行exec saddhan 1,111,'张三',1,95,’计算机’,系统提示无此操作权限。 2号教师执行:exec saddhan 1,111,'张三',1,95,’计算机’,得到结果: