访问控制课程设计实验报告.docx
- 文档编号:5132132
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:31
- 大小:1.72MB
访问控制课程设计实验报告.docx
《访问控制课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《访问控制课程设计实验报告.docx(31页珍藏版)》请在冰豆网上搜索。
访问控制课程设计实验报告
访问控制课程设计
实验报告
⏹自主访问控制实验
⏹基于角色的访问控制(RBAC1,RBAC2)
计算机科学与技术学院
一、自主访问控制实验
1.实验目的
⏹通过课程设计,使学生进一步熟悉访问控制的基本概念和基本原理;
⏹培养学生将访问控制的各种技术和方法应用于实际进行实施的能力;
⏹要求学生运用访问控制基本原理和方法,结合实际充分发挥自主创新能力进行各有特色的设计;
2.实验环境及工具
⏹操作系统:
MicrosoftWindows7
⏹数据库:
MicrosoftSQLServer2005
⏹编译平台:
MicrosoftVisualStudio2008
3.实验内容
Ø对主体、客体、权限进行定义和配置;
Ø对主体进行自主授权;
Ø对主体的访问权限进行控制;
Ø对主体进行传递授权与回收;
4.程序与数据库设计
4.1数据库设计
数据库中包含三张表,分别用于存放主体、客体和权限信息:
用户表users_table:
字段名
数据类型
说明
user_name
nchar(10)
用户名
user_psw
nchar(10)
用户密码
user_group
int
用户组别
客体表objects_table:
字段名
数据类型
说明
object_name
nchar(10)
客体名
object_data
nchar(10)
客体数据内容
object_creater
nchar(10)
客体创建者
权限表power_table:
字段名
数据类型
说明
power_user
nchar(10)
主体名
power_object
nchar(10)
客体名
power_type
nchar(10)
权限类型
power_giver
nchar(10)
授权者
数据表键值定义:
表
键值
users_table
user_name
objects_table
object_name
power_table
(power_user,power_object,power_type,power_giver)
外键设计:
外键表
外键字段
关联表
外键关联键值字段
power_table
power_user
users_table
user_name
power_table
power_object
objects_table
object_name
4.2程序设计
程序采用MFC基于对话框的应用程序设计界面,采用MFCCDatabase和CRecordset类访问数据库。
1.界面设计
界面设计采用了通用的对话框程序形式,效果如下:
开始菜单有:
登录、重新登录、退出子菜单项
管理菜单有:
用户管理、客体管理、授权管理、账户管理子菜单项
2.创建用户
直接在users_table表中加一项数据,执行的SQL语句如下:
insertintousers_table(user_name,user_psw,user_group)values('%s','%s',%d)
3.删除用户
依次按照表格中的操作执行:
操作
SQL语句
说明
获得用户创建的客体列表
select*fromobjects_tablewhereobjects_table.object_creater='%s'
通过数据集获得创建客体列表
删除没一个创建的客体
删除客体的算法下面说明
对每一个创建的客体都要删除
删除权限表中和该用户相关的所有项
deletefrompower_tablewherepower_table.power_user='%s'
无
删除用户表中该用户条目
deletefromusers_tablewhereusers_table.user_name='%s'
无
4.创建客体
创建客体需在客体表中添加一项,并且在把对该客体的所有权限添加给创建者,实现中定义了读(R)、写(W)、添加(A)、删除(D)、控制权(C)、拥有权(O),操作如下:
操作
SQL语句
说明
添加客体项
insertintoobjects_table(object_name,object_data,
object_creater)values('%s','%s','%s')
无
添加R权限
insertintopower_table(power_user,power_object,power_type,power_giver)values('%s','%s','R','null')
无
添加W权限
insertintopower_table(power_user,power_object,power_type,power_giver)values('%s','%s','W','null')
无
添加A权限
insertintopower_table(power_user,power_object,power_type,power_giver)values('%s','%s','A','null')
无
添加D权限
insertintopower_table(power_user,power_object,power_type,power_giver)values('%s','%s','D','null')
无
添加C权限
insertintopower_table(power_user,power_object,power_type,power_giver)values('%s','%s','C','null')
无
添加O权限
insertintopower_table(power_user,power_object,power_type,power_giver)values('%s','%s','O','null')
无
5.删除客体
首先检查当前用户是否有删除的权限,然后删除权限表中该客体相关的所有条目,在删除客体表中相关的项。
操作
SQL语句
说明
检查当前用户是否有删除权
略
只要检查权限表中是否有相应的条目即可
删除权限表中和该客体相关的所有条目
deletefrompower_tablewherepower_table.power_object='%s'
无
删除客体表中该客体的条目
deletefromobjects_tablewhereobjects_table.object_name='%s'
无
6.读、写、添加、执行客体
由于只是检查给定的用户是否对给定的客体有相应的权限,这些操作相似,只是简单检查权限表中是否有相应的条目。
操作
SQL语句
说明
权限检查
select*frompower_tablewherepower_table.power_user='%s'andpower_table.power_object='%s'andpower_table.power_type='%s'
如果返回的数据集为空,说明没有相应权限
7.授予权限
首先,进行权限检查;再添加权限项到权限表中,如果为C权,必须保证用户对同一个客体的C权唯一。
操作
SQL语句
说明
检查用户是否有对授权客体的C权
略
保证用户有对该客体的转授权
检查用户是否有对客体的待授出的权限
略
保证用户有待授出的权限
添加权限到权限表中
insertintopower_table(power_user,power_object,power_type,power_giver)values('%s','%s','%s','%s')
添加中需要检查添加的是否为C权,如果为C权,必须保证待授权用户没有从其他用户获得C权
8.回收权限
回收权限,直接删除权限表中的相应项,如果是C权必须回收由于传递授权,授出的所有权限。
操作
SQL语句
说明
删除该用户授出的权限
deletefrompower_tablewherepower_table.power_user='%s'andpower_table.power_object='%s'andpower_table.power_type='%s'andpower_table.power_giver='%s'
如果权限不是C,该操作之后,即完成回收,如果是C权继续下面的操作。
获得待回收权限用户授出的有关该客体的权限
select*frompower_tablewherepower_table.power_giver='%s'andpower_table.power_object='%s'
如果回收C权,需要回收传递授权授出的所有权限
5.程序测试效果
(1)用户登录
登录界面如下:
登录成功后效果如下:
(2)用户管理
用户管理界面如下:
(3)客体管理
客体管理界面如下:
(4)自主授权测试
admin用户创建一个账户,命名为gaotao,在创建一个客体object,然后把对object的读和写权限授予用户gaotao.
图表1创建账户gaotao
图表2创建客体object
图表3用户admin拥有对object的所有权限
图表4转授对客体object的读写权限给gaotao
图表5转授权限之后的结果
(5)主体访问权限测试
接上面的测试,此时以gaotao用户登录,查看对客体的权限:
图表6此时用户获得了对object的读写权限
图表7测试读权限
图表8测试添加权
(6)传递授权与回收测试
再用用户admin创建一个账户Eyas,创建一个客体test,把对客体test的读、写和控制权转授给gaotao,在由用户gaotao把对test的读权限转授给Eyas.
admin
gaotao
Eyas
test的读、写、控制权
test的读权
图表9转授test的读、写、控制权给gaotao
图表10用户gaotao授予对test的读权限给Eyas
图表11确认对gaotao的授权正确
图表12确认对Eyas的授权正确
图表13admin回收gaotao对test的读和控制权限
图表14gaotao只保留对test的写权限
图表15Eyas不再具有对test的权限
二、基于角色的访问控制实验(RBAC)
1.实验目的
⏹通过课程设计,使学生进一步熟悉访问控制的基本概念和基本原理;
⏹培养学生将访问控制的各种技术和方法应用于实际进行实施的能力;
⏹要求学生运用访问控制基本原理和方法,结合实际充分发挥自主创新能力进行各有特色的设计;
2.实验环境及工具
⏹操作系统:
MicrosoftWindows7
⏹数据库:
MicrosoftSQLServer2005
⏹编译平台:
MicrosoftVisualStudio2008
3.实验内容
Ø对用户、角色、权限进行配置和管理;
Ø用户对角色的指派和权限到用户的指派;
Ø基于RBAC1的角色层次管理
Ø基于RBAC2的互斥角色管理
4.程序与数据库设计
4.1数据库设计
共包含7张表,用户表(RBAC_users)、角色表(RBAC_roles)、权限表(RBAC_power)、用户到角色指派表(RBAC_user_role)、权限到角色指派表(RBAC_power_role)、角色层次表(RBAC_role_layer)、角色互斥表(RBAC_role_mutex).
用户表(RBAC_users)
字段名
类型
说明
user_name
nchar(10)
用户名
user_psw
nchar(10)
用户密码
user_type
nchar(10)
用户类型
角色表(RBAC_roles)
字段名
类型
说明
Role_name
nchar(10)
角色名
Role_Imfo
nchar(10)
角色信息
权限表(RBAC_power)
字段名
类型
说明
Power_name
nchar(10)
权限名
Power_imfo
nchar(10)
权限信息
用户到角色指派表(RBAC_user_role)
字段名
类型
说明
User_name
nchar(10)
用户名
Role_name
nchar(10)
角色名
权限到角色指派表(RBAC_power_role)
字段名
类型
说明
Power_name
nchar(10)
权限名
Role_name
nchar(10)
角色名
角色层次表(RBAC_role_layer)
字段名
类型
说明
parent_role
nchar(10)
角色层次中的上层角色
son_role
nchar(10)
角色层次中的下层角色
角色互斥表(RBAC_role_mutex)
字段名
类型
说明
original_role
nchar(10)
互斥角色
mutex_role
nchar(10)
互斥角色
数据表键定义
表名
键值
RBAC_users
user_name
RBAC_role
Role_name
RBAC_power
Power_name
RBAC_user_role
(User_name,Role_name)
RBAC_power_role
(Power_name,Role_name)
RBAC_role_layer
(parent_role,son_role)
RBAC_role_mutex
(original_role,mutex_role)
外键定义
外键所在的表
外键对应的字段
关联的表名
关联的字段
RBAC_user_role
User_name
RBAC_users
user_name
RBAC_user_role
Role_name
RBAC_roles
Role_name
RBAC_power_role
Power_name
RBAC_power
Power_name
RBAC_power_role
Role_name
RBAC_roles
Role_name
RBAC_role_layer
parent_role
RBAC_roles
Role_name
RBAC_role_layer
son_role
RBAC_roles
Role_name
RBAC_role_mutex
original_role
RBAC_roles
Role_name
RBAC_role_mutex
mutex_role
RBAC_roles
Role_name
4.2程序设计
程序采用MFC基于对话框的应用程序设计界面,用MFC类CDatabase和CRecordset实现访问数据库的操作。
1.界面设计
2.添加用户
操作
SQL语句
说明
添加数据项到用户表中
insertintoRBAC_users(user_name,user_psw,user_type)values('%s','%s','普通用户')
无
3.删除用户
操作
SQL语句
说明
删除和该用户有关的角色指派
deletefromRBAC_user_rolewhereRBAC_user_role.User_name='%s'
无
删除用户项
deletefromRBAC_userswhereRBAC_users.user_name='%s'
无
4.添加权限
操作
SQL语句
说明
添加权限到权限表中
insertintoRBAC_power(Power_name,Power_imfo)values('%s','%s')
无
5.删除权限
操作
SQL语句
说明
删除和该权限有关的角色指派
deletefromRBAC_power_rolewhereRBAC_power_role.Power_name='%s'
无
删除该权限项
deletefromRBAC_powerwhereRBAC_power.Power_name='%s'
无
6.添加角色
操作
SQL语句
说明
添加角色项到角色表中
insertintoRBAC_roles(Role_name,Role_Imfo)values('%s','%s')
无
7.删除角色
操作
SQL语句
说明
删除用户角色指派表中和该角色相关的项
deletefromRBAC_user_rolewhereRBAC_user_role.Role_name='%s'
无
删除权限角色指派表中和该角色相关的项
deletefromRBAC_power_rolewhereRBAC_power_role.Role_name='%s'
无
删除角色层次中和该角色相关的项
deletefromRBAC_role_layerwhereRBAC_role_layer.parent_role='%s'orRBAC_role_layer.son_role='%s'
无
删除角色互斥中和该角色相关的项
deletefromRBAC_role_mutexwhereRBAC_role_mutex.original_role='%s'orRBAC_role_mutex.mutex_role='%s'
无
删除角色表中该角色项
deletefromRBAC_roleswhereRBAC_roles.Role_name='%s'
无
8.添加角色层次
操作
SQL语句
说明
判断角色层次的合法性
略
不能在角色层次中引起循环,必须检查角色层次的合法性
添加角色层次
insertintoRBAC_role_layer(parent_role,son_role)values('%s','%s')
无
9.删除角色层次
操作
SQL语句
说明
删除角色层次表中的相应项
deletefromRBAC_role_layerwhereRBAC_role_layer.parent_role='%s'andRBAC_role_layer.son_role='%s'
无
10.添加角色互斥
操作
SQL语句
说明
判断添加角色互斥的合法性
略
相同的角色互斥不能多次添加
添加角色互斥
insertintoRBAC_role_mutex(original_role,mutex_role)values('%s','%s')
无
11.删除角色互斥
操作
SQL语句
说明
删除角色互斥
deletefromRBAC_role_mutexwhereRBAC_role_mutex.original_role='%s'andRBAC_role_mutex.mutex_role='%s'
deletefromRBAC_role_mutexwhereRBAC_role_mutex.original_role='%s'andRBAC_role_mutex.mutex_role='%s'
无
12.添加用户到角色的指派
操作
SQL语句
说明
检查添加的合法性
略
主要检查角色互斥
添加用户到角色的指派
insertintoRBAC_user_role(User_name,Role_name)values('%s','%s')
无
13.删除用户到角色的指派
操作
SQL语句
说明
删除用户到角色指派的相应项
deletefromRBAC_user_rolewhereRBAC_user_role.User_name='%s'andRBAC_user_role.Role_name='%s'
无
14.添加权限到角色的指派
操作
SQL语句
说明
添加权限到角色指派的相应项
insertintoRBAC_power_role(Power_name,Role_name)values('%s','%s')
无
15.删除权限到角色的指派
删除权限到角色指派的相应项
deletefromRBAC_power_rolewhereRBAC_power_role.Power_name='%s'andRBAC_power_role.Role_name='%s'
无
5.程序测试效果
1.用户登录配置和管理界面
图表16用户登录界面
图表17用户管理界面
图表18角色管理界面
图表19权限管理界面
图表20用户、角色和权限指派界面
2.用户–角色–权限指派
角色1
角色2
角色3
用户gaotao
权限1
权限2
权限3
如上建立用户、角色的指派关系以及权限、角色的指派关系,效果如下:
3.RBAC1
按照下图所示配置用户、角色和权限的指派,配置角色层次:
角色1
角色2
角色3
用户gaotao
权限1
权限2
权限3
图表21RBAC1测试效果
4.RBAC2角色互斥
按照如下图配置用户、角色和权限,以及用户到角色的指派,权限到角色的指派和角色互斥关系:
角色1
角色2
角色3
权限1
权限2
权限3
gaotao
互斥角色
图表22试图指派用户gaotao到角色2
三、总结
终于完成了访问控制课程设计,在整个课程设计中有几点体会:
◆加深了对访问控制基本概念的理解
通过实验,对自主访问控制中权限表、授权管理、传递授权与权限回收等,以及RBAC中的用户–角色指派,权限–角色指派,RBAC1中角色层次,RBAC2中定义约束等基本概念的理解。
◆初步学习了把访问控制基本原理应用于解决问题的方法
因为以前学习书本知识都是基本的理论知识,根本不知道怎么通过程序实现,这次通过程序实现,也让自己知道了怎么把学习的理论在实践中实现。
◆学会了数据库访问的基本操作
在这之前,基本没有运用数据库写程序,通过这次课程设计,对数据操作也有了一点了解,这相当于一项意外的收获吧!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 访问 控制 课程设计 实验 报告