MAC 非常适合机密机构或者其他等级观念强烈的行业,过重强调保密性,管理不够灵活。在实现上,MAC 和 DAC 通常为每个用户赋予对客体的访问权限规则集,考虑到管理的方便,在这一过程中还经常将具有相同职能的用户聚为组,然后再为每个组分配许可权。
强制访问策略强制访问控制系统根据主体和客体的敏感标记来决定访问模式,模式包括
- 不上读(NRU),主体不可读安全级别高于他的数据;
- 不下读(NRD),主体不可读安全级别低于他的数据
- 不上写(NWU),主体不可写安全级别高于他的数据。
- 不下写(NWD),主体不可写安全级别低于他的数据。
由于安全性,这种方式一直被军方所使用,下面讲述两种被广泛使用的强制访问控制安全模型
- BLP 模型:在 BLP 模型中,不上读,不下写,也就是不允许低安全等级的用户读取高安全等级的信息,不允许高敏感度的信息写入低敏感度的区域,禁止信息从高级别流向低级别,强制访问控制通过这种梯度的安全标签实现信息的单向流通
- Biba 模型:由于 BLP 模型存在不保护信息的完整性和可用性,不涉及访问控制等缺点,所以使用 Biba 模型作为一个补充,它针对的是信息的完整性保护,主要用于非军事领域,Biba 模型使用不下读,不上写的原则来保证数据的完整性,在实际的应用中主要是避免应用程序修改某些重要的系统程序或系统数据库,这样可以使资源的完整性得到保障。也就是写,只能读上级发给他的命令,不能读他的下级接收到什么命令
管理员定义一系列角色(roles)并把它们赋予主体。系统进程和普通用户可能有不同的角色。设置对象为某个类型,主体具有相应的角色就可以访问它。这样就把管理员从定义每个用户的许可权限的繁冗工作中解放出来。
基于角色的访问控制 (RBAC, Role Based Access Control) 在用户和权限之间引入了 “角色(Role)” 的概念,角色解耦了用户和权限之间的关系。
角色和组的主要区别:
- 组是用户的集合
- 角色是权限的集合
- 角色 / 权限之间的变化比组 / 用户关系之间的变化相对要慢得多,减小了授权管理的复杂性
基于角色的访问控制模型 RBAC,有时成为基于规则的基于角色的访问控制(Rule-Based Role-Based Access Control,RB-RBAC)。它包含了根据主体的属性和策略定义的规则动态地赋予主体角色的机制。例如,你是一个网络中的主体,你想访问另一个网络中的对象。这个网络在定义好了访问列表的路由器的另一端。路由器根据你的网络地址或协议,赋予你某个角色,这决定了你是否被授权访问。
发展历程RBAC0
RBAC0 作为基础模型,只包含核心的三要素,用户,角色,权限。用户和角色可以是多对多的关系,权限和角色也是多对多的关系。
RBAC1
RBAC1 包括了 RBAC0 并且添加了角色继承。顾名思义,角色继承就是指角色可以继承于其他角色,在拥有其他角色权限的同时,自己还可以关联额外的权限。这种设计可以给角色分组和分层,一定程度简化了权限管理工作。也就是角色之间存在上下级的关系,对应到实体设计中也就是角色实体的自身关联。
RBAC2
RBAC2 也包括 RBAC0 并且添加了约束。RBAC1 和 RBAC2 相互独立.
RBAC2 的约束规定了权限被赋予角色时,或角色被赋予用户时,以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。
互斥约束:包括互斥用户,互斥角色,互斥权限。同一个用户不能拥有相互排斥的角色,两个互斥角色不能分配一样的权限集,互斥的权限不能分配给同一个角色,在 session 中,同一个角色不能拥有互斥权限。
基数约束:一个角色被分配的用户数量受限,它指的是有多少用户能拥有这个角色。例如:一个角色专门为公司 CEO 创建的,那这个角色的数量是有限的。
先决条件角色:指要想获得较高的权限,要首先拥有低一级的权限。例如:先有副总经理权限,才能有总经理权限。
RBAC3
RBAC3 是一个全功能的 RBAC,RBAC3 合并了 RBAC0,RBAC1,RBAC2.