访问控制课程设计实验报告Word下载.docx
《访问控制课程设计实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《访问控制课程设计实验报告Word下载.docx(31页珍藏版)》请在冰豆网上搜索。
![访问控制课程设计实验报告Word下载.docx](https://file1.bdocx.com/fileroot1/2022-12/13/22651182-e26e-4899-b869-056f0727a33e/22651182-e26e-4899-b869-056f0727a33e1.gif)
nchar(10)
用户名
user_psw
用户密码
user_group
int
用户组别
客体表objects_table:
object_name
客体名
object_data
客体数据内容
object_creater
客体创建者
权限表power_table:
power_user
主体名
power_object
power_type
权限类型
power_giver
授权者
数据表键值定义:
表
键值
users_table
objects_table
power_table
(power_user,power_object,power_type,power_giver)
外键设计:
外键表
外键字段
关联表
外键关联键值字段
4.2程序设计
程序采用MFC基于对话框的应用程序设计界面,采用MFCCDatabase和CRecordset类访问数据库。
1.界面设计
界面设计采用了通用的对话框程序形式,效果如下:
开始菜单有:
登录、重新登录、退出子菜单项
管理菜单有:
用户管理、客体管理、授权管理、账户管理子菜单项
2.创建用户
直接在users_table表中加一项数据,执行的SQL语句如下:
insertintousers_table(user_name,user_psw,user_group)values('
%s'
'
%d)
3.删除用户
依次按照表格中的操作执行:
操作
SQL语句
获得用户创建的客体列表
select*fromobjects_tablewhereobjects_table.object_creater='
通过数据集获得创建客体列表
删除没一个创建的客体
删除客体的算法下面说明
对每一个创建的客体都要删除
删除权限表中和该用户相关的所有项
deletefrompower_tablewherepower_table.power_user='
无
删除用户表中该用户条目
deletefromusers_tablewhereusers_table.user_name='
4.创建客体
创建客体需在客体表中添加一项,并且在把对该客体的所有权限添加给创建者,实现中定义了读(R)、写(W)、添加(A)、删除(D)、控制权(C)、拥有权(O),操作如下:
添加客体项
insertintoobjects_table(object_name,object_data,
object_creater)values('
)
添加R权限
insertintopower_table(power_user,power_object,power_type,power_giver)values('
R'
null'
添加W权限
insertintopower_table(power_user,power_object,power_type,power_giver)values('
W'
添加A权限
A'
添加D权限
D'
添加C权限
C'
添加O权限
O'
5.删除客体
首先检查当前用户是否有删除的权限,然后删除权限表中该客体相关的所有条目,在删除客体表中相关的项。
检查当前用户是否有删除权
略
只要检查权限表中是否有相应的条目即可
删除权限表中和该客体相关的所有条目
deletefrompower_tablewherepower_table.power_object='
删除客体表中该客体的条目
deletefromobjects_tablewhereobjects_table.object_name='
6.读、写、添加、执行客体
由于只是检查给定的用户是否对给定的客体有相应的权限,这些操作相似,只是简单检查权限表中是否有相应的条目。
权限检查
select*frompower_tablewherepower_table.power_user='
andpower_table.power_object='
andpower_table.power_type='
如果返回的数据集为空,说明没有相应权限
7.授予权限
首先,进行权限检查;
再添加权限项到权限表中,如果为C权,必须保证用户对同一个客体的C权唯一。
检查用户是否有对授权客体的C权
保证用户有对该客体的转授权
检查用户是否有对客体的待授出的权限
保证用户有待授出的权限
添加权限到权限表中
添加中需要检查添加的是否为C权,如果为C权,必须保证待授权用户没有从其他用户获得C权
8.回收权限
回收权限,直接删除权限表中的相应项,如果是C权必须回收由于传递授权,授出的所有权限。
删除该用户授出的权限
deletefrompower_tablewherepower_table.power_user='
andpower_table.power_object='
andpower_table.power_type='
andpower_table.power_giver='
如果权限不是C,该操作之后,即完成回收,如果是C权继续下面的操作。
获得待回收权限用户授出的有关该客体的权限
select*frompower_tablewherepower_table.power_giver='
如果回收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)
对用户、角色、权限进行配置和管理;
用户对角色的指派和权限到用户的指派;
基于RBAC1的角色层次管理
基于RBAC2的互斥角色管理
共包含7张表,用户表(RBAC_users)、角色表(RBAC_roles)、权限表(RBAC_power)、用户到角色指派表(RBAC_user_role)、权限到角色指派表(RBAC_power_role)、角色层次表(RBAC_role_layer)、角色互斥表(RBAC_role_mutex).
用户表(RBAC_users)
类型
user_type
用户类型
角色表(RBAC_roles)
Role_name
角色名
Role_Imfo
角色信息
权限表(RBAC_power)
Power_name
权限名
Power_imfo
权限信息
用户到角色指派表(RBAC_user_role)
User_name
权限到角色指派表(RBAC_power_role)
角色层次表(RBAC_role_layer)
parent_role
角色层次中的上层角色
son_role
角色层次中的下层角色
角色互斥表(RBAC_role_mutex)
original_role
互斥角色
mutex_role
数据表键定义
表名
键值
RBAC_users
RBAC_role
RBAC_power
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_roles
程序采用MFC基于对话框的应用程序设计界面,用MFC类CDatabase和CRecordset实现访问数据库的操作。
2.添加用户
SQL语句
添加数据项到用户表中
insertintoRBAC_users(user_name,user_psw,user_type)values('
普通用户'
删除和该用户有关的角色指派
deletefromRBAC_user_rolewhereRBAC_user_role.User_name='
删除用户项
deletefromRBAC_userswhereRBAC_users.user_name='
4.添加权限
insertintoRBAC_power(Power_name,Power_imfo)values('
5.删除权限
删除和该权限有关的角色指派
deletefromRBAC_power_rolewhereRBAC_power_role.Power_name='
删除该权限项
deletefromRBAC_powerwhereRBAC_power.Power_name='
6.添加角色
添加角色项到角色表中
insertintoRBAC_roles(Role_name,Role_Imfo)values('
7.删除角色
删除用户角色指派表中和该角色相关的项
deletefromRBAC_user_rolewhereRBAC_user_role.Role_name='
删除权限角色指派表中和该角色相关的项
deletefromRBAC_power_rolewhereRBAC_power_role.Role_name='
删除角色层次中和该角色相关的项
deletefromRBAC_role_layerwhereRBAC_role_layer.parent_role='
orRBAC_role_layer.son_role='
删除角色互斥中和该角色相关的项
deletefromRBAC_role_mutexwhereRBAC_role_mutex.original_role='
orRBAC_role_mutex.mutex_role='
删除角色表中该角色项
deletefromRBAC_roleswhereRBAC_roles.Role_name='
8.添加角色层次
判断角色层次的合法性
不能在角色层次中引起循环,必须检查角色层次的合法性
添加角色层次
insertintoRBAC_role_layer(parent_role,son_role)values('
9.删除角色层次
删除角色层次表中的相应项
andRBAC_role_layer.son_role='
10.添加角色互斥
判断添加角色互斥的合法性
相同的角色互斥不能多次添加
添加角色互斥
insertintoRBAC_role_mutex(original_role,mutex_role)values('
11.删除角色互斥
删除角色互斥
andRBAC_role_mutex.mutex_role='
12.添加用户到角色的指派
检查添加的合法性
主要检查角色互斥
添加用户到角色的指派
insertintoRBAC_user_role(User_name,Role_name)values('
13.删除用户到角色的指派
删除用户到角色指派的相应项
andRBAC_user_role.Role_name='
14.添加权限到角色的指派
添加权限到角色指派的相应项
insertintoRBAC_power_role(Power_name,Role_name)values('
15.删除权限到角色的指派
删除权限到角色指派的相应项
andRBAC_power_role.Role_name='
1.用户登录配置和管理界面
图表16用户登录界面
图表17用户管理界面
图表18角色管理界面
图表19权限管理界面
图表20用户、角色和权限指派界面
2.用户–角色–权限指派
角色1
角色2
角色3
用户gaotao
权限1
权限2
权限3
如上建立用户、角色的指派关系以及权限、角色的指派关系,效果如下:
3.RBAC1
按照下图所示配置用户、角色和权限的指派,配置角色层次:
图表21RBAC1测试效果
4.RBAC2角色互斥
按照如下图配置用户、角色和权限,以及用户到角色的指派,权限到角色的指派和角色互斥关系:
图表22试图指派用户gaotao到角色2
三、总结
终于完成了访问控制课程设计,在整个课程设计中有几点体会:
◆加深了对访问控制基本概念的理解
通过实验,对自主访问控制中权限表、授权管理、传递授权与权限回收等,以及RBAC中的用户–角色指派,权限–角色指派,RBAC1中角色层次,RBAC2中定义约束等基本概念的理解。
◆初步学习了把访问控制基本原理应用于解决问题的方法
因为以前学习书本知识都是基本的理论知识,根本不知道怎么通过程序实现,这次通过程序实现,也让自己知道了怎么把学习的理论在实践中实现。
◆学会了数据库访问的基本操作
在这之前,基本没有运用数据库写程序,通过这次课程设计,对数据操作也有了一点了解,这相当于一项意外的收获吧!