访问控制之“程咬金携薛刚出城”

访问控制之“程咬金携薛刚出城”

书从何起?书从主谓宾起。主谓宾结构为一种文法的语序,即语法顺序为主语—谓语—宾语的结构,像"我吃苹果"就是一个例子,在此范例中“我”为主词(主语,物),“吃”为动词(谓语动词),“苹果”为名词(宾语,物)。所以也可以理解为两物一动作为主谓宾结构。
把抽象等级提高一下,往高级了说主谓宾其实就是“主体 变换 客体”;往低级了说其实就是“i.Eat(apple)”,其中i是User类型的对象,apple是Fruit类型的对象。
为什么我们需要更高的抽象等级?因为对于那整棵人类构建的用以描述这个世界的人类知识树来说:越靠近根节点的越抽象,越靠近根节点的抽象越能沟通范围更广的领域。作为搞计算机的我们并不是人类的全部,我们需要上溯,我们需要借助我们分工得到的领域的父节点去沟通兄弟领域,我们构建的软件不是我们自己用的。对于计算机领域来说上溯到语言层次基本上能沟通各种计算平台了。

计算机信息系统中的访问控制就像古装电视剧里演的差不多,程咬金携带着马车,马车里装着薛刚,程咬金要携带着闹了花灯的薛刚逃出城去。城门处就是一个访问策略执行点。城门守卫会检查程咬金所携带的东西。如果城门守卫发现了程咬金携带的薛刚的话他就通不过城门了。城门守卫赶在程咬金出城之前得到了系统中心下达的拒绝薛刚出城的访问策略(高维度的变换,比如线性的空间的变换,高维度的变换是基于范围更大的集合,基于更多的信息的支撑而采取的变换,比如安全引擎往那个内存位置写值城门守卫去那个位置读值,安全引擎在更高维度看过这个世界,安全引擎知道在何处读写什么信息,这种变换所处的维度更高可以认为这就像是打电话,安全引擎中心以光速打电话给城门守卫的,在低维度逃跑的薛刚不可能超过光速)。
但是程咬金还是成功出城了,所以说这访问控制这件事情比较令人难过。程咬金这个主体有特权,谁知被他一吓唬那个守城门的守卫就没敢搜查他携带的东西了。还有一个故事是“邱瑞荷花缸藏秦琼”。荷花缸是皇帝赐的,宇文成都的搜查令覆盖不了荷花缸的权限。这都说明访问控制这件事情很让人难过。1,皇城系统虽然防伪精密但只要是人设计的就可能有疏漏;2,反贼也是人,也有主观能动性。

主体是唯一一种可以由来自系统外部的力驱动而移动的空间单元,在一个系统看来,在它中活动的主体是整个系统中唯一一种有主观能动性的可以自己移动的空间单元;而客体是种永远不能自主移动的空间单元,客体的移动必定是由于主体的搬离、携带、放置。

买火车票的时候系统生成了一个票,这个票相当于是个值,系统要求乘车的人携带着这个票意思是这个值被打在了人身上,也就是说部分访问控制信息存储在主体空间单元中。
计算机中的事情概括为:主体、客体、变换。变换是种运动,在计算机里随时随地在发生着,发生的非常频繁,变换往往比较短暂,难以去记录下和跟踪每一次变换过程。但是变换必定一端连接着主体,一端连接着客体。而主体和客体都是相对比较稳定的空间单元,所以访问控制信息可以打在主体和客体身上去。把访问控制信息打在客体身上时趋向于acl,把访问控制信息打在主体身上时趋向于capability(能力表)。通过打在主体身上的capability信息可以容易的控制粗粒度的权限,通常用于控制功能级的权限,功能级权限其实就是一个集合一个集合的去控制主体、客体、变换,因为功能(Action、Operation)其实就是一种函数,是输入集到输出集的映射程序。

acl存储在客体一端,处在客体一端的权限通常属于“数据权限”,capability处在主体一端,处在主体一端的通常属于功能权限,但这也不是绝对的,因为如果处在主体那端的capability记录所描述的客体空间如果精确到一定的度的话我们也可以认为那是数据权限,同样如果处在客体一端的acl描述的主体非常的宽广甚至不限定主体而只给个Function列表白名单的话这也可以认为是功能权限。capability和acl中间并不是真空的,中间还有东西连接了capability和acl这两端。主体和客体之间不是真空地带,至少会有40层的组织结构(“结构”而非“机构”)出现在主客体之间连接了两者。甚至可以这样说:所谓主体和客体其实本质就是用组织结构+功能表描述的,可以说主体和客体的本质其实都是组织结构。

以上太抽象了,我们得想办法把我们制造的软件系统用空间体结构(形脉)和意脉描述出来,描述成类似人体生命系统那样的东西(皇帝、反贼、都城、守卫、大臣、人民、天气系统、土地粮食生成系统、运输、道路、程咬金、秦琼、宇文成都、薛刚等等这些事物组成的系统跟人体生命系统没有任何本质差别,整个世界是分形的到处都一样的,只是所处的层级不同)。把人构建的系统按照人体生命系统去描述这是必然趋势,因为它是人构建的,是谁构建的它它就注定趋向于谁。
A一定会按照自己的样子去构建系统A1,A1一定还会按照自己的样子去构建系统A1.1,A1.1一定还是会按照自我的样子去构建A1.1.1……我们编程,我们改造世界,我们的方向是被注定要朝着构建人造人的方向去的。一定要沿着东方人熟知的知识树构建我们的系统。

在《庄子·内篇·应帝王第七》,庄子叙“七窍出而浑沌死”故事。故事大意为:南海的帝王叫“倏”,北海的帝王叫“忽”,中央的帝王叫“浑沌”。倏和忽在浑沌的地方相会,浑沌对待他们很好。倏和忽想报答浑沌,见大家都有眼耳口鼻,用来看听吃闻,浑沌没有七窍,就为他凿七窍。每天凿一窍,七天后,七窍出,而浑沌则死了。