功能说明

强制访问控制是相对于自由访问控制的。在自由访问控制中,客体的拥有者或者SA/DBA可以把对客体的操纵权限授权给其他用户/角色,同时如果授予了这些用户/角色Grantable权限,则它们可以继续把自己拥有的权限授权给别人。这样的权限管理就很随意和难以控制,信息的流动在系统中是不可预期的,无法真正的保护数据安全。在自由访问控制中的客体是没有安全属性的,在安全检查中完全处于被动的地位。

而强制访问控制实现权限的统一管理,同时客体和主体都有自己的安全标记,只有当它们的安全标记符合一定的访问规则时,主体才可以访问客体。例如,如果客体安全标记的安全级别高于主体的当前安全级别,那么主体就无法访问客体。主体的权限必须由SA设定,不能随意授权,即主体不能把自身的权限进一步授给别人,这也是强制访问控制的由来。强制访问控制可以较好的实现对信息流动的控制,更好的实现对安全数据的保护。

在神通数据库中,强制访问控制将实现行级和列级的访问控制,即每行和列都有一个安全标记,用于与访问者的安全标记进行比较。并不是任何两个安全标记就是可比较的,如果主体的安全标记不能与客体的安全标记比较,则主体肯定不能访问客体。如果两个安全标记之间有支配关系(见术语节Dominate),那么这样的两个安全标记就是可比较的。对于主体和客体的安全标记,如果它们可比较,则将根据比较结果(即支配关系)及其访问规则确定主体是否可以访问(读/写)客体,关于更详细的访问规则的描述见概要设计。

在前面术语节我们已经看到了安全标记的构成。对于客体来说,其安全标记或者是在应用强制访问控制策略时自动生成的,或者是插入数据时由用户提供或系统根据用户的授权信息自动生成的,也可能由用户修改。对于主体来说,其安全标记是由安全管理员授权之后,系统生成的。

因此,神通数据库中的强制访问控制过程基本上就是根据访问请求(读or写)比较主客体的安全标记的过程,在这之前需要定义、应用安全策略,定义安全标记,授权给主体。这个过程的详细描述见概要设计文档。

在神通数据库中,强制访问控制可以与基于角色的自主访问控制结合起来一起使用:当用户访问一个客体时,首先利用自主访问控制检查是否有相应的权限(SELECT/INSERT/UPDAT等),如果检查通过,再在访问每一行时,根据主体的安全标记与每行数据的安全标记进行比较和检查。只有两种检查都通过用户才可以访问相应的数据。