RBAC(基于⾓⾊的访问控制权限的基本模型)
(⼀)基本概念
1.定义
RBAC(Role-Based Access Control),也就是所谓的**“基于⾓⾊的访问控制权限”**。
2.优势
在RBAC中,⽤户不再直接与权限相连,⽽是通过“⾓⾊”这⼀属性来间接的被赋予权限,⽤户通过成为适当的⾓⾊来的到这些⾓⾊固有的权限,这样处理就解耦了⽤户与权限的关系。这就极⼤地简化了权限的管理。在⼀个组织中,⾓⾊是为了完成各种⼯作⽽创造,⽤户则依据它的责任和资格来被指派相应的⾓⾊,⽤户可以很容易地从⼀个⾓⾊被指派到另⼀个⾓⾊。⾓⾊可依新的需求和系统的合并⽽赋予新的权限,⽽权限也可根据需要⽽从某⾓⾊中回收。⾓⾊与⾓⾊的关系可以建⽴起来以囊括更⼴泛的客观情况。
3.⽰例
这⼀思想在⽣活中很常见,如果我们这样定义:⼠兵就是在战场上冲锋作战的⼈,班长就是在战场上冲锋作战,还要管理班级,传达命令的⼈,连长就是负责对接营长,制定计划,下达命令的⼈。
那么如果王五是⼠兵,赵六也是⼠兵,那么他们两个就都可以在战场上冲锋作战,⽽李四则是班长,他除去冲锋作战,还要传达命令、管理班级。⽽张三是连长,他作为⾼级官员是负责对接营长,制定计划,下达命令。
那么此时我们就已经定义了⽤户,⾓⾊,权限这三个属性。
为了便于理解,我们看⼀张图:
假如我们没有采取这种思想,那我们会这么说:王五是在战场上冲锋作战的,赵六也是战场上冲锋作战的,李四是战场上冲锋作战,还要传达命令、管理班级的,张三是负责制定计划,下达命令和管理连队的。
在⼈很少的情况下这样还勉强可以,但如果有⼀千个⼠兵⼀百个班长⼀万个连长呢?这样对应计算机来讲,就有着⼗分⼤的耦合性。如果做成关系型数据库,就会有很⼤的数据冗余。
但是如果我们给每⼀个特定权限都赋予⼀个⾓⾊⽤以承载,这个问题就解决了。
只要给在战场上冲锋作战的⼈⼀个“⼠兵”⾓⾊,那么我们就只要说张三李四都是⼠兵就可以了。因为这时“⼠兵”这⼀⾓⾊就承载着对应的权限:作战冲锋。
(⼆)RBAC模型
1.基本的RBAC模型
现在对RBAC模型的分类⼤概有五种:
基本模型RBAC0
⾓⾊分层模型RBAC1
圆规台风实时路径⾓⾊限制模型RBAC2
统⼀模型RBAC3
基于RBAC的延展——⽤户组
这⼀篇主要讲RABC0模型,剩余的如果以后有时间也会写出来。
2.RBAC0模型
我们在前⾯讲了⼠兵班长的例⼦,你可能会想:
难道班长就不能制定作战计划、下达命令了?连长就不能传达命令、管理班级了?难道班长就不是⼀个⼠兵吗?
如果你有了这样的观念,那就说明你对RBAC0模型已经开始逐渐地掌握了。
成本控制是的,作为⼀个班长,他也有着制定作战计划,下达命令的权限(在这⾥为了便于理解我们不讨论下达的是连队的命令还是班级的命令,只抽象出“制定计划,下达命令”权限),连长也可以冲锋陷阵,这就引出了我们RBAC0模型的⼜⼀⼤特征——多对多。
更改过后的图如下:
我们可以看到,战⼠这个⾓⾊可以对应多个⼈,班长这个⾓⾊有有多个权限,⽽作战冲锋⼜可以被多个⾓⾊实现。⽤户拥有的权限等于他所有的⾓⾊持有权限之和。
那么我们以李四这个⼈为例,可以看到:
李四是⼀名班长⼜是⼀名战⼠,他有制定计划,下达命令,传达命令,管理班级,作战冲锋的权限!
所以概述型的RBAC0模型就可以总结如下:
(三)关系型数据库的实现
怎样和女孩子聊天1.设计数据库
下⾯开始设计数据库:我们需要⼀张⽤户表(person),⼀张⾓⾊表(role),⼀张权限表(permission),还需要两张中间表分别是⽤户-⾓⾊表(person_role),⾓⾊-权限表(role_permission)。
可能有⼈会问:我们为什么还要中间表?很简单:实现表的多对多关系。
2.数据库实现
我们在这⾥赋予每个⾓⾊⼀个权限等级,设置等级⾼的⾓⾊可以拥有等级低的⼀切权限,⽽等级低的⾓⾊则不允许拥有等级⾼⾓⾊的权限(1)person新闻两则
(2)role
(3)person_role
(4)permission
2021立冬(5)
role_permission
2.SQL 测试
测试语句如下:
测试效果如图:
鉴于本⼈⽔平有限,如有错误,还望各位指出,谢谢⼤家——THE END——SELECT person .id ,person .姓名,person .性别,person .籍贯,role .⾓⾊名,role .权限等级,permission .权限名 FROM person INNER JOIN person_role ON person .id = person_role .person_id INNER JOIN role ON person_role .role_id = role .id INNER JOIN role_permission ON role .id = role_permission .role_id INNER JOIN permission ON role_permission .permiss
ion_id = permission .id WHERE person .id = 1
1
2
3
4
5
6
7
gta5怎么联机
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论