术语
这里对后面会用到的词汇做一个说明
用户
发起操作的主体。
对象(Subject)
指操作所针对的客体对象,比如订单数据或图片文件。
权限控制表 (ACL: Access Control List)
用来描述权限规则或用户和权限之间关系的数据表。
权限 (Permission)
用来指代对某种对象的某一种操作,例如“添加文章的操作”。
权限标识
权限的代号,例如用“ARTICLE_ADD”来指代“添加文章的操作”权限。
常见设计模式
自主访问控制(DAC: Discretionary Access Control)
系统会识别用户,然后根据被操作对象(Subject)的权限控制列表(ACL: Access Control List)或者权限控制矩阵(ACL: Access Control Matrix)的信息来决定用户的是否能对其进行哪些操作,例如读取或修改。
而拥有对象权限的用户,又可以将该对象的权限分配给其他用户,所以称之为“自主(Discretionary)”控制。
这种设计最常见的应用就是文件系统的权限设计,如微软的NTFS。
DAC最大缺陷就是对权限控制比较分散,不便于管理,比如无法简单地将一组文件设置统一的权限开放给指定的一群用户。
比如Windows的文件权限
强制访问控制(MAC: Mandatory Access Control)
MAC是为了弥补DAC权限控制过于分散的问题而诞生的。在MAC的设计中,每一个对象都都有一些权限标识,每个用户同样也会有一些权限标识,而用户能否对该对象进行操作取决于双方的权限标识的关系,这个限制判断通常是由系统硬性限制的。比如在影视作品中我们经常能看到特工在查询机密文件时,屏幕提示需要“无法访问,需要一级安全许可”,这个例子中,文件上就有“一级安全许可”的权限标识,而用户并不具有。
MAC非常适合机密机构或者其他等级观念强烈的行业,但对于类似商业服务系统,则因为不够灵活而不能适用。