# 前言
本篇记录学习数据库系统概论的第四章 -- 数据库安全性
# 数据库安全性概述
数据库的安全性是指保护数据库中的数据,以防止不合法的使用导致数据库中数据的泄露,更改和破坏
# 数据库的不安全因素
- 非授权用户对数据库的恶意存取和破坏
- 数据库中安全或敏感的数据被泄露
- 安全环境的脆弱性
# 安全标准
桔皮书(TCSEC)和 CC 标准,是最具有影响力的两大准则,当下 CC 已经基本取代了 TCSEC 成为评估信息产品安全性的主要标准
# TCSEC 标准
从四个方面来描述安全性级别划分的指标,即 安全策略
, 责任
, 保证
和 文档
下图是发展史
从这四个方面又划分出如下 7 个等级
安全级别从上往下越来越低,D 级包含了所有不符合更高标准的系统
- C1,能够实现用户和数据的分离,进行自主存取控制(DAC)
- C2,安全产品的最低档,提供受控的存取保护
- B1,对标记的主体和课题实施强制存取控制(MAC)以及审计等安全机制,被认为是真正意义上的安全产品
- B2 结构化保护
- B3,安全域
- A1,验证设计
# CC 标准
国际公认的表述信息技术安全性的结构,主要由三个部分组成
- 简介和一般模型
- 安全功能要求
- 安全保证要求
他的安全级别也是划分为 7 个等级分别对应 TCSEC 安全级别
# 数据库安全性控制
上面所记录仅做了解,接下来是本篇的重心部分
再计算机系统中,安全措施是一级一级层层设置的
这样如上图的一个验证过程
数据库安全控制的常用方法
- 用户身份鉴定
- 存取控制
- 视图
- 审计
- 数据加密
# 用户的身份鉴定
用户标识通常由用户名和用户标识号两部分组成
常用的身份鉴别方法
- 静态口令鉴别:常用,简单但是安全性低
- 动态口令鉴别:比较安全
- 生物特征鉴别:较高的安全性
# 存取控制
数据库安全性最重要的一点就是确保只有授权的用户能访问数据库
存取控制的机制
- 用户定义权限
- 合法权限检查
- 二者共同组成了 DBMS 的存取控制子系统
# 自主存取控制
通过 SQL 语言的 GRANT
(授予)和 REVOKE
(收回)语句实现,用户的权限组成:数据库对象,操作类型
定于用权限,定于用户可以在哪些表上面可以进行哪些操作,下表是关系数据库中的存储权限
# 授权和权限回收
# 授权
GRANT <权限>[,<权限>]... ON <对象类型> <对象名>[,<对象类型><对象名>]... TO <用户>[,<用户>]... [WITH GRANT OPTION];/* 又最后一句话的时候证明权限是可以授予给他人的 */ |
把查询Student的权限授予给用户U1
grant select ON Student to U1; |
把对Student和Course的全部权限授予U2,U3
grant All privileges ON Student,Course to U2,U3; |
把对SC表的查询权限授予所有用户
grant select on SC to public; |
把查询Student表和修改Sno的权限授予U4
grant select,update(Sno) on Student to U4; |
对SC表的INSERT权限授予U5,且可再次授权
grant insert on SC to U5 with grant option; |
# 权限收回
REVOKE <权限>[,<权限>]... ON <对象类型><对象名>[,<对象类型><对象名>]... FROM <用户>[,<用户>]...; |
把用户U4修改学号的权限收回
revoke update(Sno) ON Student from U4; |
收回所有用户对表SC的查询权限
revoke select ON SC from public; |
把用户U5对SC表的Insert权限收回
revoke insert on SC from U5 cascade;#cascade 级联操作,收回 U5 授予出去的权限 |
<font color=red> 用户可以自主决定将数据的存取权限授予任何人,决定是否也将授权的权限搜娱给别人,这样的存取控制称为用户自主存取控制 </font>
# 数据库角色
数据库角色是数据库权限的集合,为了简化授权过程,为一组具有相同权限的用户创建一个角色
角色的创建
CREATE ROLE <角色名>;
给角色授权
GRANT <权限>[,<权限>]... ON 对象名 TO <角色>[,<角色>]...;
将一个角色授予其他的角色或用户
GRANT <角色1>[,<角色2>]... TO <角色2>[,<用户1>]... [WITH ADMIN OPTION];
角色权限的收回
REVOKE <权限>[,<权限>]... ON <对象类型><对象名> FROM <角色>[,<角色>]...;
通过角色来实现将一组权限搜娱一个用户
首先创建一个角色 R1
create role R1;
然后使用 FRANT 语句,使角色 R1 拥有 Student 表的 SELECT,UPDATE,INSERT 权限
grant select,update,insert on Student to R1;
将这个角色权限授予王平,张明,赵玲,使他们具有角色 R1 所包含的全部权限
grant R1 to 王平,张明,赵玲;
通过 R1 一次性收回王平的这三个权限
revoke R1 from 王平;
# 强取存取控制的方法
自主存取控制缺点:
- 可能存在数据的 “无意泄露”
- 这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
- 解决:对系统控制下的所有主客体实施存取控制策略
强制存取控制(MAC)
- 保证更高的安全性
- 用户不能直接感知或进行控制
- 适用于对数据有严格而固定密级分类的部门
- 军事、政府部门
主体是系统中的活动实体
- DBMS 所管理的实际用户
- 代表用户的各进程
客体是系统中的被动实体,是受主体操纵的
- 文件
- 基表
- 索引
- 视图
敏感读标记(Label)
- 绝密(Top Secret)
- 机密(Secret)
- 可信(Confidential)
- 公开(public)
主体的敏感度标记称为许可证级别(Clearabce Level)
客体的敏感度标记称为密级(Claccification Level)
强制存取控制规则
- 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
- 仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
# 审计
审计日志
将用户对数据库的所有操作记录都在上面
DBA 利用审计日记
找出非法存取数据的人,时间和内容
C2 以上安全级别的 DBMS 必须具有
# 数据加密
数据加密
- 防止数据库中数据在存储和传输中失密的有效手段
加密的基本思想
- 根据一定的算法将原始数据(明文)变换为不可直接识别的格式(密文), 从而使得不知道解密算法的人无法获知数据的内容.
数据加密分类
- 存储加密
- 传输加密