名词解释
| name | 名称 | 描述 |
|---|---|---|
| Subject | 主体 | 通常是用户或者用户组 |
| Action | 操作 | 对Object的操作,比如访问、创建、删除、查询、修改等 |
| Object | 对象 | 权限所作用的对象,通常指各类资源 |
| Effect | 效力 | 限规则匹配后的操作,比如Allow/Deny |
| Condition | 限制条件 | 权限生效的条件 |
| Permission | 权限 | 用来指代是否允许某人在某种条件下对某种资源做某种操 |
| Role | 角色 | 权限集合,包含了一个或多个权限(Permission) |
| Policy | 策略 | 一组规则/声明,在特定用户尝试执行特定操作时进行评估,然后将策略应用于用户、组和角色 |
权限模型
不同的权限模型具有不同的特点,可以满足不同的需求。常见的权限模型有下面这 5 种:
- 权限控制列表(ACL,Access Control List)。
- 自主访问控制(DAC,Discretionary Access Control)。
- 强制访问控制(MAC,Mandatory Access Control)。
- 基于角色的访问控制(RBAC,Role-Based Access Control)。
- 基于属性的权限验证(ABAC,Attribute-Based Access Control)。
权限控制列表(ACL)
ACL(Access Control List,权限控制列表),用来判断用户是否可以对资源做特定的操作。例如,允许 Colin 创建文章的 ACL 策略为:
Subject: Colin
Action: Create
Object: Article
在 ACL 权限模型下,权限管理是围绕资源 Object 来设定的.
自主访问控制(DAC)
DAC (Discretionary Access Control,自主访问控制),是 ACL 的扩展模型,灵活性更强。使用这种模型,不仅可以判断 Subject 是否可以对 Object 做 Action 操作,同时也能让 Subject 将 Object、Action 的相同权限授权给其他的 Subject。例如,Colin 可以创建文章:
Subject: Colin
Action: Create
Object: Article
因为 Colin 具有创建文章的权限,所以 Colin 也可以授予 James 创建文章的权限:
Subject: James
Action: Create
Object: Article
经典的 ACL 模型权限集中在同一个 Subject 上,缺乏灵活性,为了加强灵活性,在 ACL 的基础上,DAC 模型将权限下放,允许拥有权限的 Subject 自主地将权限授予其他 Subject。
强制访问控制(MAC)
MAC (Mandatory Access Control,强制访问控制),是 ACL 的扩展模型,安全性更高。MAC 权限模型下,Subject 和 Object 同时具有安全属性。在做授权时,需要同时满足两点才能授权通过:
- Subject 可以对 Object 做 Action 操作。
- Object 可以被 Subject 做 Action 操作。
例如,我们设定了“Colin 和 James 可以创建文章”这个 MAC 策略:
Subject: Colin
Action: Create
Object: Article
Subject: James
Action: Create
Object: Article
我们还有另外一个 MAC 策略“文章可以被 Colin 创建”:
Subject: Article
Action: Create
Object: Colin
在上述策略中,Colin 可以创建文章,但是 James 不能创建文章,因为第二条要求没有满足。
基于角色的访问控制(RBAC)
RBAC (Role-Based Access Control,基于角色的访问控制),引入了 Role(角色)的概念,并且将权限与角色进行关联。用户通过扮演某种角色,具有该角色的所有权限。

基于属性的权限验证(ABAC)
ABAC (Attribute-Based Access Control,基于属性的权限验证),规定了哪些属性的用户可以对哪些属性的资源在哪些限制条件下进行哪些操作。跟 RBAC 相比,ABAC 对权限的控制粒度更细,主要规定了下面这四类属性:
- 用户属性,例如性别、年龄、工作等。
- 资源属性,例如创建时间、所属位置等。
- 操作属性,例如创建、修改等。
- 环境属性,例如来源 IP、当前时间等。
下面是一个 ABAC 策略:
Subject:
Name: Colin
Department: Product
Role: Writer
Action:
- create
- update
Resource:
Type: Article
Tag:
- technology
- software
Mode:
- draft
Contextual:
IP: 10.0.0.10
上面权限策略描述的意思是,产品部门的 Colin 作为一个 Writer 角色,可以通过来源 IP 是 10.0.0.10 的客户端,创建和更新带有 technology 和 software 标签的草稿文章。
相关开源项目
- Casbin
- keto
- ladon