粗粒度与细粒度
粗粒度与细粒度是一个相对的概念,也不是说对所有会涉及到粗粒粒度问题的工作都是一致偏向的。粗粒度和细粒度的区别主要是出于重用的目的。像类的设计,为尽可能重用,所以采用细粒度的设计模式,将一个复杂的类(粗粒度)拆分成高度重用的职责清晰的类(细粒度)。 对于数据库的设计,原则:尽量减少表的数量与表与表之间的连接,能够设计成一个表的情况就不需要细分,所以可考虑使用粗粒度的设计方式。
数据库访问控制的粗细粒度问题:
根据控制对象的粗细程度,访问控制可分为粗粒度和细粒度两种 通常把规定访问整个数据库表或由基本表导出的视图的某个层称为粗粒度的访问控制,而细粒度控制则是把安全控制细化到数据库的行级或列级。
我们给银行上了一套系统,银行的政策允许所有财务经理可以访问所有账户持有人的信息,但在最近,对该政策做了改变只允许财务经理访问特定的客户集,那么为了使应用程序符合新的政策,我们必须对应用程序进行修改,有三种选择
1. 修改应用程序代码,使所有SQL语句都包含一个WHERE子句。但如果将来政策又有变化,则必须再一次修改代码,所以从长远考虑这不是一个好方法
2. 保持应用程序不动,用判定词创建表的视图,并用与表名一样的名字为这些视图创建同义词 。从应用程序不变更和安全性的角度来看这种方法比较好,但可能难于管理,因为有大量潜在的视图需要跟踪和管理
3. 保持应用程序不动,使用Truman模型实现。
简称 | 英文 | 说明 |
---|---|---|
RLS | Row Level Security | 行级别安全性 |
VPD | Virtual Private database | 虚拟专有数据库 |
同义词 | synonym | 别名的意思,类似视图。 就是一种映射关系 |
Truman模型
U.C. Berkeley 的 Shariq Rizvi 和其他人提出了 Truman 模型,该模型基于数据库级别修改查询。Truman 模型的想法是为每个用户提供数据库的个人视图。为实现此目的,需要对用户的查询进行修改以确保用户不能查看允许之外的内容。
Truman 模型:用户向数据库提交SQL语句,修改器拦截用户提交的语句,通过一定的策略修改语句后再执行。如下图:
![SouthEast.gif](https://images2017.cnblogs.com/blog/1101237/201801/1101237-20180130094521125-555423204.gif)
在Truman 模型下,相当于每个用户都拥有自己的私有数据库,用户在该数据库中进行数据管理(如查询,添加和修改数据)。
![SouthEast.gif](https://images2017.cnblogs.com/blog/1101237/201801/1101237-20180130094521359-973634349.gif)
Truman 模型有时也称为_细粒度访问控制_ (FGAC) 或_行级安全_ (RLS)。(该模型名称的灵感源自于 1998 年的电影 The Truman Show 中 Truman Burbank 角色所处的人工世界)。
该模型的优点包括:单点授权实施、可以拥有动态的集合、最终用户查询功能以及高效的数据处理(这是空间数据一个主要方面)。
Truman模型的实现有:
l Oracle的VPD。
l Research的RLS。
l SQL Server的RLS。