📜  分布式操作系统中访问矩阵的实现

📅  最后修改于: 2022-05-13 01:56:11.300000             🧑  作者: Mango

分布式操作系统中访问矩阵的实现

如前所述,访问矩阵可能非常稀疏并占用大量内存。因此,直接实现访问矩阵进行访问控制是存储效率低下的。

可以通过将访问矩阵分解为行或列来消除低效率。可以通过删除空值等来折叠行以提高效率。从这些分解方法中可以形成三种被广泛使用的访问矩阵的实现。它们如下:

1. Capabilities
2. Access Control List
3. Lock and Key Method 

因此,我们将简要讨论上述实现。
值得记住的是,我们用s表示主语,用O表示宾语,并将它们分别放在列和行上。

  1. 能力:
    该方法是指访问矩阵的行分解。每个 Subject 都分配有一个元组列表(o, M[s, o]),用于允许它访问的所有对象。这个元组被称为能力。如果主体拥有能力 (o, M[s, o]),则允许以 M[s, o] 中描述的方式访问客体 o。一个主体可以访问它拥有能力的任何对象。能力不是用来伪造的。

    功能包含两个字段:



    (i) Object Descriptor, 
    (ii) Access Rights 

    对象描述符可能包含对象的地址,访问权限可能包含主体对对象的权限,主要是读写、执行。由于对象描述符包含地址,因此它也可以用作寻址机制。

    下面是能力的格式。

  2. 访问控制列表:
    该方法指的是访问矩阵的列分解。每个对象 o 都有一个列表,其中包含所有可以访问该对象的主体 s 的元组,如 (s, M[s, o]) 。P[s, o] 表示主体 s 对对象 o 的权限。

    当主体请求访问时\alpha对于对象 o,它按以下方式执行。

    • 系统搜索 o 的访问控制列表以找出一个条目 (s, \phi ) 存在于主题 s
    • 如果和条目 (s, \phi ) 存在于主题 s 然后系统检查以查看请求的访问是否被允许。(即, \alpha \epsilon \phi )
    • 如果请求的访问被允许,则执行请求,否则会引发适当的异常。

    下面是对象 o 的访问控制列表的示例实现。

    SubjectsAccess Right
    raviRead, Write, Execute
    ranaRead
    jeffyWrite
    aliceExecute

    ;



    访问控制列表的主要功能是轻松撤销轻松查看访问权限。

  3. 锁和钥匙方法:
    锁和钥匙方法是访问控制列表和能力方法的混合体。

    在 lock and key 方法中,每个主体都有一个能力列表,其中包含形式为 (o, key) 的元组,表明主体可以使用 key key访问对象 o。对象有一个访问控制列表,其中包含形式(锁定、 \phi ),称为锁条目,表示可以被集合中的模式访问\phi .

    当主体以模式请求访问客体 o 时\alpha ,系统按以下方式执行。

    • 系统在主题的能力列表中定位元组(o,key)。如果没有找到这样的元组 id,则不允许访问。
    • 否则,只有存在锁条目(lock, \phi ) 在对象 o 的访问控制列表中,使得key = lock\alpha \epsilon \phi

所以这是最常用的访问矩阵的实现。我们已经以简短而紧凑的方式讨论了这些流程。用法、优点和缺点可以在以后的帖子中介绍。