21/7/28 读书笔记 数据安全性控制
21/7/28 读书笔记
数据库系统概论 数据存取控制
数据库安全最重要的一点在于数据的存取控制,确保只有授权的人能够获取与修改数据库中特定的信息。其主要由用户权限登记和用户合法权限检查两部分组成。
按照对权限的定义与检查方式不同,分为自主存取控制(DAC)和 强制存取控制(MAC)。前者允许用户自主决定权限的转派,后者由数据库强制限制所有用户的权限。
自主存取控制 Discretionary Access Control
大多数的数据库管理系统支持DAC,SQL也提供了对自主存取控制的支持,因此我们基于SQL标准进行DAC的学习。
DAC中定义权限由两个要素组成:
- 数据库对象:指明权限的操作对象
- 操作类型:指明在操作对象上能够执行的操作
因此我们称授权就是定义一个用户可以在哪些数据库对象上执行哪些类型的操作。
SQL标准如下定义了数据库对象名称和操作类型:
数据库对象名称 | 操作类型 |
---|---|
模式 SCHEMA | CREATE SCHEMA |
基本表 TABLE | CREATE TABLE,ALTER TABLE,SELECT,INSERT,UPDATE,DELETE,REFERENCES,ALL PRIVILEGES |
视图 VIEW | CREATE VIEW,SELECT,INSERT,UPDATE,DELETE,REFERENCES,ALL PRIVILEGES |
索引 INDEX | CREATE INDEX |
属性列 | SELECT,INSERT,UPDATE,REFERENCES,ALL PRIVILEGES |
并提供了GRANTE和REVOKE语句用于管理用户权限:
GRANT SELECT,UPDATE(Sname)
ON TABLE Student
TO Norton
WITH GRANT OPTION; # 赋予用户Norton查询Student表以及更新Student.Sname属性列的权限;WITH GRANT OPTION表明Norton有权利向其他用户传播自己被授予的上述权限
用户Norton:
GRANT SELECT
ON TABLE Student
TO Qiume; # Norton将查询Student的权限传播给QIume
REVOKE SELECT
ON TABLE Student
FROM Norton CASCADE; # 撤回Norton的查询权限,CASCADE表明级联撤回,即将Norton基于SELECT权限传播的其他权限一起收回
SQL的授权语句中有几个约定的特点:
- 用户名PUBLIC为保留字段,表示所有用户。
- CREATE相应对象的权限属于数据库模式相关的权限,不使用GRANT和REVOKE控制,而是在用户创建时指定。SQL标准没有对用户的创建进行明确规定,各个数据库实现差距较大。
- 当指明属性列插入权限INSERT(xxx)时,要注意同时需要指明其主码列的插入权限。没有主码列的插入权限会使得插入时主码为空。而导致插入操作因为主码为空被拒绝。
- ALL PRIVILAGES 指明所有权限,但是不包括CREATE相应对象的权限。
- WITH GRANT OPTION 控制了用户是否有权利向其他用户传播自己被授予的权限。
SQL标准还规定了角色(ROLE)的概念,其表示了权限的集合。当赋予一个用户某个角色后,就相当于用户获取了所有相关的权限。
CREATE ROLE Teacher;
GRANT SELECT
ON TABLE Student
TO Teacher
WITH ADMIN OPTION;
GRANT Teacher
TO Norton;
REVOKE Teacher
FROM Norton;
角色的授予中可以使用WITH ADMIN OPTION,允许被授予该角色的用户基于被授予的权限创建新的角色并授予其他用户。
强制存取控制 Mandatory Access Control
MAC对于权限和存取控制方式不同于自主存取控制DAC。其首先定义主体是系统中所有的活动实体,包括实际用户与各个应用程序进程;定义客体是数据库中受主体操纵的对象。其授予所有客体一定的敏感度标记(密级),再给所有的用户授予特定等级的安全许可证。
书中第147页4.2.6小节第一句话中将自主存取控制的缩略词误写为MAC(2014年9月第五版)
只有当用户的安全许可证等级高于存取对象的安全性等级时才允许访问。更具体地来说:
- 仅当主体的许可证等级大于等于客体的密级时,主体才允许读客体
- 仅当主体的许可证等级小于等于客体的密级时,主体才允许写客体
- 这条规则主要是为了保证敏感数据保持密级由低到高的流动。否则一个高等级用户可以通过向低密级的数据库对象写入高密级信息,从而使得高密级信息泄露。
MAC不允许用户自主地进行权限的传播,而是强制地为所有数据设置密级,因此其安全性比DAC更高。
SQL标准没有对MAC做出要求。
数据库系统概论 审计、数据加密、其他安全性保护
审计
审计功能能够记录下用户对数据库对象的所有操作,就此提供监控数据库行为、重现漏洞和责任溯源。审计是一项耗费系统资源的功能,因此作为可选功能通常用于高安全性要求的对象上。
具体来说,审计基于对可审计事件的记录,而可审计事件又包括:
- 服务器事件:服务器启动、停止、配置文件重新加载等的记录。
- 系统权限变动:基于系统权限,对数据库系统结构进行变更的记录。
- 语句事件:使用SQL语句的记录。
- 模式对象事件:对特定模式对象(基本表、视图、函数等)进行查询和操纵操纵的记录。
SQL提供AUDIT和NOAUDIT语句来开启与关闭对特定数据库表或视图上特定操作的审计功能,这属于用户级审计:
AUDIT ALTER
ON SC; # 开启SC表上对ALTER操作的审计
NOAUDIT ALTER
ON SC;
大多数数据库中运行开启系统级审计,对登录请求、授权与收回等数据库级权限下的操作进行审计。
数据加密
数据库系统中分为存储加密和传输加密。存储加密指将数据经过加密后存储在物理存储介质中,根据加密解密过程是否对用户透明分为透明存储加密和非透明存储加密。透明存储加密下数据库管理系统自动将数据基于数据库内核进行加密与解密,性能较高。
传输加密一般指数据库服务器与用户客户端之间的信息传输加密,通常基于现有的可信传输方案实现,比如SSL等。
其他安全性保护
我们之前介绍了DAC与MAC,而MAC安全性虽然更高,但是仍然存在一定的缺陷。下面的安全性保护是基于MAC的缺陷而提出的:
推理加密
数据库对象间常常具有可推理的关联,比如在成绩管理系统中,我们要求每个同学的成绩只对自己可见,而排名应该对所有人可见,以保证评优过程透明化。但是对于排名16名的小明来说,他知道自己90分的同时也知道了同桌的小米排在第15名,那么他就有理由推理出小应该也是90分上下。这里我们假设小米的许可证等级与成绩的密级均比小明更高。
推理控制机制需要避免用户利用其能够访问的数据推知更高密级的数据,常用的方法包括基于函数依赖或敏感关联的推理控制。
隐蔽信道
数据库系统中同时存在多个许可证等级不同的用户,由于安全策略的固定,我们必须防止一个高许可证等级用户通过数据库系统向低许可证等级的用户泄密。而这种泄密的通道可能是非常隐蔽的,我们称之为隐蔽信道。理论上,如果一个高许可证等级用户的一个操作能够被低许可证等级用户观测到,那么这个操作就能够构成一个隐蔽信道。
书中举的一个例子是利用UNIQUE约束条件构成隐蔽信道,高许可证等级用户向表中插入A记录,随后低等级用户也向该表插入A记录。如果插入成功,说明高等级用户没有插入A记录,记为1;反之插入失败,说明高等级用户已经插入记录,记为0。由此高等级用户就能向低等级用户传递二进制信息。但是我认为在MAC的两条规则的约束下,我们没法找到这样一个能够同时被低等级和高等级用户写入的表,因为高等级用户不能向低于自己许可证等级的表进行写操作。