基于RBAC访问控制的数据库课程设计报告.docx
- 文档编号:16193339
- 上传时间:2023-07-11
- 格式:DOCX
- 页数:42
- 大小:591.57KB
基于RBAC访问控制的数据库课程设计报告.docx
《基于RBAC访问控制的数据库课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于RBAC访问控制的数据库课程设计报告.docx(42页珍藏版)》请在冰点文库上搜索。
基于RBAC访问控制的数据库课程设计报告
中南大学
《数据库课程设计》报告
题目教职工数据库管理系统
学院信息科学与工程学院
专业班级物联网1001
完成时间2013.7.4
第一章问题描述1
第二章系统需求分析2
2.1需求描述4
2.2系统功能结构图4
2.3数据顶层流图5
2.4操作处理的子流图6
第三章数据库设计8
3.1全局E-R图8
3.2数据字典9
3.3数据库内关系表定义10
第四章数据库实现4
4.1数据库创建SQL代码11
4..2关系表及相关视图创建SQL代码11
4.2.1各表的SQL代码11
4.2.2各视图的SQL代码15
4..3触发器及存储过程创建SQL代码17
4.3.1触发器的SQL代码17
4.3.2存储过程的SQL代码20
第五章RBAC应用场景描述26
5.1登录场景26
5.2查看信息和删除场景26
5.3插入信息场景27
5.4修改用户密码场景28
5.5编辑教工信息表场景29
第六章心得体会与总结30
第一章问题描述
本次数据库课程设计选题是《大学教工管理系统》,实现教职工信息的管理,主要在数据库底层利用RBAC的控制访问实现对职工信息的有序和妥善的分权管理。
即创建不同的角色实现对教职工信息的各种分级很分权操作。
比如对教职工信息的查阅,修改,删除,插入等。
图1核心RBAC
在本次(《教职工管理系统》中,可以用两个映射表,分别是角色用户映射表,一个是角色权限映射表。
基本表应包括用户表、角色表、权限表、用户角色映射表、角色权限映射表通过给用户分配角色,给角色分配权限实现人员的权限控制,来达到RBAC的要求。
第二章系统需求分析
2.1需求描述
本系统是旨在实现教职工的RBAC管理,关键技术在于数据库底层,系统需要的有最基本的五张表,分别是用户表、角色表、权限表、用户角色映射表、角色权限映射表。
另外还有为了数据库增删改查的方便性而建立的其他表等等
其中对RBAC的主要需求的具体描述如下
不同职责的人员,对于系统操作的权限应该是不同的。
不同职责就好比不同的角色,对每一个角色赋予不同的权限,这里就需要对权限建立一张权限表,对角色建立一张角色表,然后根据这两张表建立权限角色映射表实现对权限的赋予和划分。
对“组”进行权限分配。
如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情。
所以,系统中就提出了对“组”进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配。
权限管理系统应该是可扩展的。
它应该可以加入到任何带有权限管理功能的系统中。
就像是组件一样的可以被不断的重用,而不是每开发一套管理系统,就要针对权限管理部分进行重新开发。
2.2系统功能结构
图2.2系统结构图
说明:
该系统实现的主要功能是:
1、登录。
每个用户可以凭自己的用户名和密码登录系统;
2、职工信息查询。
包括员工查看自己信息,部长和副部长查看本部门员工信息,管理员查看所有员工信息;
3、职工信息插入。
普通职工不可以插入,部长和副部长可以插入比他职位小的本部门职工的信息,管理员可以插入任何部门和任何职工的信息;
4、职工信息修改。
普通职工可以修改自己的性别,姓名,密码和电话号码,部长和副部长可以部长和副部长可以插入比他职位小的本部门职工的职位,所属部门和电话号码,管理员可以修改除密码以外的其他所有信息;
5、职工信息删除。
普通职工不可以删除任何职工信息,部长和副部长可以删除比他职位小的本部门职工的信息,管理员可以删除任何部门和任何职工的信息;
6、退出。
每个用户登录系统后可以退出系统,在一定的超时情况下可以自动退退出系统。
2.3数据流图:
图2.3数据流图
第三章数据库设计
3.1全局E-R图
权限
部门
角色
员工
性别
职位
用户
组成
属于
隶属
拥有
角色权限映射
用户角色映射
员工ID
姓名
性别
性别ID
部门ID
职位ID
用户ID
电话
过程
名称
权限ID
性别名称
角色ID
职位ID
部门ID
密码
职位名称
部门名称
根据底层数据库创建的表和数据流图可以得出一下全局E-R图:
图3.1全局E-R图
3.2数据字典
员工信息表(Info)
字段名
数据类型
约束条件
说明
uid
int
主键,级联
用户ID
name
nchar(10)
非空
用户名
sex
int
非空,外键
性别
phone
char(50)
非空
电话
性别表(Sex)
字段名
数据类型
约束条件
说明
id
int
主键
性别ID
sex
nchar(10)
非空(男,女)
性别名陈
部门表(Department)
字段名
数据类型
约束条件
说明
did
int
主键,级联
部门ID
department
nchar(10)
非空,唯一
部门名
职位表(Zhiwei)
字段名
数据类型
约束条件
说明
zid
int
主键,级联
职位ID
zhiwei
nvchar(50)
非空
职位名称
权限表(Permission)
字段名
数据类型
约束条件
说明
pid
int
主键,级联
权限ID
pname
nchar(50)
非空
权限名
pobject
nchar(50)
非空
存储过程名
用户表(UserTable)
字段名
数据类型
约束条件
说明
uId
int
主键,级联
用户ID
pswd
char(50)
非空
密码
角色表(Role)
字段名
数据类型
约束条件
说明
rid
int
主键,级联
角色ID
depart
int
非空,外键
部门ID
zhiwei
int
非空,外键
职位ID
角色权限映射表(Role_Permission)
字段名
数据类型
约束条件
说明
rid
int
主键,外键
角色ID
pid
int
主键,外键
权限ID
用户角色映射表(User_Role)
字段名
数据类型
约束条件
说明
uid
int
主键,外键
用户ID
rid
int
主键,外键
角色ID
3.3数据库内关系表定义
员工信息表(Info)(员工ID,员工姓名,员工性别,联系电话);
性别表(Sex)(性别ID,性别名称(男,女));
职位表(Zhiwei)(职位ID,职位名称);
部门表(Department)(部门ID,部门名称);
用户表(UserTable)(用户ID,用户密码);
权限表(Permission)(权限ID,权限名称,权限过程);
角色表(Role)(角色ID,部门ID,职位ID);
用户角色映射表(User_Role)(用户ID,角色ID);
角色权限映射表(Role_Permission)(角色ID,权限ID)
第四章数据库实现
4.1数据库创建SQL代码
createdatabaseCSU_teacher
4.2关系表(及相关视图)创建SQL代码
4.2.1各表的SQL代码
图4.2.1表单图
CREATETABLEInfo(
uidintNOTNULL,PRIMARYKEY,/*用户ID主键,唯一标识该表的每一元组*/
namenchar(10)NOTNULL,/*用户姓名,非空*/
sexintNOTNULL,/*用户性别,非空*/
phonenvarchar(50)NULL,/*用户电话,允许空值*/
)GO/*---------------表Info----------------------*
CREATETABLEDepartment(
didintNOTNULL,PRIMARYKEY,/*部门ID,主键,唯一标识该表的每一元组*/
departmentnchar(10)NOTNULLUNIQUE,/*部门名称,唯一*/
)
GO/*-----------------表Department-------------*/
CREATETABLEPermission(
pidintNOTNULL,PRIMARYKEY,/*主键,权限ID*/
pnamenvarchar(50)NOTNULL,/*权限名称,非空*/
pojectnvarchar(50)NOTNULL,/*权限过程名,非空*/
)
GO/*------------表Permission------------------*/
CREATETABLEZhiwei(
zidintNOTNULL,PRIMARYKEY,/*职位ID,主键*/
zhiweinvarchar(50)NOTNULL,UNIQUE/*职位名称,非空,唯一*/
)
GO/*-----------表Zhiwei----------------*/
CREATETABLERole(
ridintNOTNULL,PRIMARYKEY,/*角色ID,主键*/
departintNOTNULL,/*部门ID,外键于部门表(Department)的部门ID(did)*/
zhiweiintNOTNULL,/*职位ID,外键于职位表(Zhiwei)的职位ID(zid)*/
FOREIGNKEY(depart)REFERENCESDepartment(did)/*外键定义*/
ONUPDATECASCADE/*级联更新*/
ONDELETECASCADE,/*级联删除*/
FOREIGNKEY(zhiwei)REFERENCESZhiwei(zid)/*外键定义*/
ONUPDATECASCADE/*级联更新*/
ONDELETECASCADE,/*级联删除*/
)
GO/*-----------表Role----------------*/
CREATETABLERole_Permission(
ridintNOTNULL,PRIMARYKEY,/*角色ID,主键,外键*/
pidintNOTNULL,PRIMARYKEY,/*权限ID,主键,外键*/
FOREIGNKEY(pid)REFERENCESPermission(pid)/*权限ID,外键于权限表(Permission)的权限ID(pid)*/
ONUPDATECASCADE/*级联更新*/
ONDELETECASCADE/*级联删除*/
FOREIGNKEY(rid)REFERENCESRole(rid)/*角色ID,外键于角色表(Role)的角色ID(rid)*/
ONUPDATECASCADE/*级联更新*/
ONDELETECASCADE,/*级联删除*/
)
GO/*-----------表Role_Permission--------*/
CREATETABLESex(
idintNOTNULL,PRIMARYKEY,/*性别ID,主键*/
sexnchar(10)NOTNULL,
checkvaluesin(‘男’,‘女’),/*性别名称,且只能是“男”或“女”。
否者违反约束无法插入或更新*/
)
GO/*-----------表Sex--------*/
CREATETABLEUser_Role(
uidintNOTNULL,PRIMARYKEY,/*用户ID,主键,外键*/
ridintNOTNULL,PRIMARYKEY,/*角色ID,主键,外键*/
FOREIGNKEY(uid)REFERENCESInfo(uid)/*用户ID,外键于用户表(UserTable)的用户ID(uid)*/
ONUPDATECASCADE/*级联更新*/
ONDELETECASCADE,/*级联删除*/
FOREIGNKEY(rid)REFERENCESRole(rid)/*角色ID,外键于角色表(Role)的角色ID(rid)*/
ONUPDATECASCADE/*级联更新*/
ONDELETECASCADE,/*级联删除*/
)
GO/*-----------表User_Role--------*/
CREATETABLEUserTable(
uidintNOTNULL,PRIMARYKEY,/*用户ID,主键*/
pswdnvarchar(50)NOTNULL,/*用户密码,非空*/
FOREIGNKEY(uid)REFERENCESInfo(uid)/*用户ID,外键于员工信息表(Info)的(uid)*/
ONUPDATECASCADE/*级联更新*/
ONDELETECASCADE,/*级联删除*/
)
GO/*-----------表UserTable--------*/
4.2.2,各视图的创建代码
图4.2.2视图列表图
/*角色部门选择视图*/
/*创建于表角色表(Role),部门表(Department)上*/
SELECTRole.rid,Department.did
/*角色表中选择角色ID,部门表中选择部门ID*/
FROMDepartmentINNERJOIN
RoleONDepartment.did=Role.depart
/*根据部门ID号相等连接权限表和部门表,*/
/*权限映射视图*/
/*创建于表权限表(Permission),角色表(Role),角色权限映射表(Role_Permission)上*/
SELECTPermission.pojectA,Role.rid,Permission.pid,Permission.poject
/*选择权限过程,角色ID,和权限ID*/
FROMRole_PermissionINNERJOIN
PermissionONRole_Permission.pid=Permission.pidINNERJOIN
RoleONdbo.Role_Permission.rid=Role.rid
/*根据权限ID相等连接角色权限映射表和权限表,根据角色ID相等连接角色表和角色权限映射表,从而实现这三个表的连接*/
/*员工身份判断视图*/
/*创建于表角色表(Role),职位表(Zhiwei)上*/
SELECTRole.rid,Zhiwei.zid,Zhiwei.zhiwei
/*选择角色ID,职位ID和职位名称*/
FROMRoleINNERJOIN
ZhiweiONRole.zhiwei=Zhiwei.zid
/*用职位ID相等将角色表和职位表连接起来*/
/*员工账号密码视图*/
/*创建于表员工信息表(Info),用户表(UserTable)上*/
SELECTInfo.name,UserTable.uid,UserTable.pswd,Department.department
/*选择员工姓名,用户ID,用户密码,部门名称*/
FROMRoleINNERJOIN
DepartmentONRole.depart=Department.didINNERJOIN
User_RoleONRole.rid=User_Role.ridINNERJOIN
InfoINNERJOIN
UserTableONInfo.uid=UserTable.uidONUser_Role.uid=Info.uid
/*根据部门ID相等连接角色表和部门表,根据角色ID相等连接角色表和用户角色映射表,根据用户ID相等连接用户表和员工信息表,从而实现这四个表的连接*/
/*职工所属部门视图*/
/*创建于表员工信息表(Info),部门表(Department)上*/
SELECTInfo.uid,Department.did,Department.department
/*选择员工ID,部门ID,部门名称*/
FROMDepartmentINNERJOIN
RoleONDepartment.did=Role.depart
INNERJOIN
User_RoleONRole.rid=User_Role.ridINNERJOIN
InfoONUser_Role.uid=Info.uid
/*根据角色ID相等连接角色表和用户角色映射表,根基用户ID相等连接用户表和用户角色映射表,从而实现这三个表的连接*/
/*职工信息表*/
/*创建于表信息表(Info),部门表(Department),角色表(Role),职位表(Zhiwei),部门表(Department),用户角色映射表表(User_Role)上*/
SELECTInfo.uid,Info.name,Info.phone,Sex.sex,Zhiwei.zhiwei,Department.department,
/*选择员工ID,员工姓名。
员工电话,性别,职位名称,部门*/
FROMSexINNERJOIN
InfoONSex.id=Info.uidINNERJOIN
User_RoleONInfo.uid=User_Role.uidINNERJOIN
DepartmentINNERJOIN
RoleONDepartment.did=Role.departONUser_Role.rid=Role.ridINNERJOIN
ZhiweiONRole.zhiwei=Zhiwei.zid
/*根据性别ID相等连接性别表和员工信息表,根据用户ID相等连接员工表和角色用户映射表,根据角色ID相等连接角色表和角色用户映射表,根据部门ID相等连接部门表和角色表,根据职位ID连接角色表和职位表*/
4.3存储过程、触发器等的创建SQL代码
4.3.1触发器SQL代码
图4.3.1触发器图
/*该触发器是用于每插入一条员工信息就在用户表上添加一条用户ID等于插入的员工ID,密码为“1”的记录*/
createtriggerInsert_UserTable/*触发器名称为Insert_UserTable*/
onInfo
afterinsert
asbegin
declare@newuidint/*声明参数newuid*/
select@newuid=uidfrominserted
insertintoUserTable
values(@newuid,1)
end
4.3.2存储过程SQL代码
图4.3.2存储过程列表图
①/*创建验证登录信息的存储过程Admin_login*/
CREATEprocedure[dbo].[Admin_login](@uidint,@pswdnvarchar(50))
as
declare@pidint
begin
selectridfromRolewhererid=(selectridfromUser_rolewhereuid=(selectuidfromUserwhereuid=@uidandpswd=@pswd))
end
②/*创建删除行级的存储过程Del_line,每次删除行级信息时调用此存储过程*/
createprocedure[dbo].[Del_line](@uidint)
as
deletefromInfowhereuid=@uid
③/*创建获取用户对应角色的权限的存储过程Get_permission,每次用户登录并选好角色后获取该用户该角色状态下的所有权限*/
createprocedure[dbo].[Get_permission](@ridint)
as
selectpojectfrom权限映射视图whererid=@rid
④/*利用用户信息中的职位和部门,创建在用户登录成功后获得该用户对应的角色名的存储过程get_rid*/
createprocedureget_rid(@zhiweiint,@departint)
as
selectridfromRolewherezhiwei=@zhiweianddepart=@depart
⑤/*利用用户的角色ID创建得到该用户所在部门的存储过程Get_depart*/
createprocedureGet_depart(@ridint)
as
selectdidfrom角色部门选择视图
⑥/*根据插入员工信息表单的员工ID,部门和职位,创建在用户角色表中插入用户角色元组的存储过程Insert_User_Role*/
createprocedureInsert_User_Role(@uidint,@ridint,,@zhiweiint,@zidint)
as
declare@resint
if(@zid>=@zhiwei)/*操作者的职位必须是属于要修改的人员的职位以上的*/
begin
if(@rid=0)
begin
deletefromInfowhereuid=@uid
set@res=0
end
else
begin
insertintoUser_role(uid,rid)values(@uid,@rid)
set@res=1
end
end
else
begin
deletefromInfowhereuid=@uid
set@res=0
end
return@res
⑦/创建当职工进行密码修改时获取修改的新密码,跟新用户表中的相应用户的密码的存储过程Update_pswd*/
createprocedureUpdate_pswd(@uidint,@pswdnvarchar(50))
as
updateUserTablesetpswd=@pswdwhereuid=@uid
⑧/*利用用户的角色ID创建得到该用户所属职位的职位ID的存储过程Get_zid*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 RBAC 访问 控制 数据库 课程设计 报告