四. 数据库安全性
- 问题的提出
- 数据库的一大特点就是数据可以共享
- 数据共享必然带来数据库的安全性问题
- 数据库中的数控共享不可能是无条件的共享
4.1 数据库安全性概述
4.1.1 数据库的不安全因素
- 非授权用户对数据库的恶意存取和破坏
- 数据库中重要或敏感的数据被泄露
- 安全环境的脆弱性
4.1.2 安全标准简介
-
TCSES标准
-
TCSEC/TDI标准的基本内容
从四个方面来描述安全界别划分的指标
- 安全策略
- 责任
- 保证
- 文档
-
-
TCSES标准
- D级
- 将一切不符合更高标准的系统归于D组
- 典型例子:DOS是安全标准为D的操作系统
- C1级
- 非常初级的自主安全保护
- 能够实现对用户和数据的分离,进行自主存取控制(DAC),保护或限制用户权限的传播
- 现有的商业系统稍微改进即可满足
- C2级
- 是安全产品的最低档次
- 提供受控的存取保护,将C1级的DAC进一步细化,以个人身份注册服务,并实施审计和资源隔离
- 达到C2级的产品在其名称上往往不突出“安全”(Security)这一特色
- 典型例子
- Windows 2000
- Oracle 11g
- B1级
- 标记安全保护
- 对系统的数据加以标记,对标记的主体和客体实施强制存取服务(MAC)、审计等安全机制
- B1级典型例子
- 操作系统:惠普公司的HP-UX BLX release9.09+
- 数据库
- B2级
- 结构化保护
- 建立形式化 的安全策略模型并对系统内的所有主体和客体实施DAC和MAC
- B3级
- 安全域
- 该级的TCB必须满足访问监控器的要求,审计跟踪能力更强,并提供系统恢复过程
- A1级
- 验证设计
- D级
-
CC标准
- 提出国际公认的表述信息技术安全性的结构
- 把信息产品的安全要求分为
- 安全功能要求
- 安全保证要求
4.2 数据安全性控制
- 计算机系统中,安全措施是一级一级层层设置
- 数据库安全性控制的常用方法
- 用户身份鉴别
- 存取控制
- 视图
- 审计
- 数据加密
4.2.1 用户身份鉴别
- 用户身份鉴别
- 系统提供的最外层安全保护措施
- 用户标识:由用户名和用户标识号组成
- 鉴别方法
- 静态口令鉴别
- 动态口令鉴别
- 智能卡鉴别
- 生物 特征鉴别
4.2.2 存取控制
-
存取控制机制组成
- 定义用户权限,并将用户权限登记到数据字典中
- 合法权限检查
-
用户权限的定义和合法权检查机制一起组成了DBMS 的存取控制子系统
4.2.3 自主存取控制方法
- 自主存取控制机制(DAC)
- 用户对不同的数据对象有不同的存取权限
- 不同的用户对同一对象也有不同的权限
- 用户还可以将其拥有的存取权限转授给其他用户
- 通过 SQL 的GRANT 语句 和RVOKE 语句实现
4.2.4 授权:授予与回收
1. 权限授予:GRANT
-
GRANT 语句的一般格式
GRANT<权限>[,<权限>]... ON<对象类型><对象名>[,<对象类型><对象名>]... TO<用户>[,<用户>]... [WITH GRANT OPTION]; /*指定该子句:可以在授权权限 没有指定:不能授权传播*/
语义:将对指定操作对象的指定操作权限授予指定的用户
不允许循环授权
-
发出GRANT
- DBA
- 数据库对象创建者(即属主Owner)
- 拥有该权限的用户
【eg.4.1】把查询Student 表权限授予用户U1
GRANT SELECT
ON TABLE Student
TO U1;
将一种权限授予一种用户
【eg.4.2】把对Student和Course表的全部授权授予用户U2和U3
GRANT ALL PRIVILEGES /*全部权限*/
ON TABLE Student,Course
TO U2,U3;
一次向多个用户传播多种同类对象的权限
【eg.4.3】把对SC表的查询权限授予所有用户
GRANT SELECT
ON SC
TO PUBLIC;
【eg.4.4】把查询Student表和修改学生学号的权限授予给用户U4
GRANT UPDATE(Sno),SELECT
ON Student
TO U4;
对属性列的授权必须明确指明相应属性列名
一次完成了对基本表和属性列这些不同对象的授权
【eg.4.5】把对表SC的INSERT 权限授予U5用户,并允许它将此权限授予其他用户
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
执行后,U5不仅拥有了对表SC的INSERT 权限,还可以传播此途径
【eg.4.6】
GRANT INSERT
ON TABLE SC
TO U6
WITH GRANT OPTION;
2. 权限回收:REVOKE
-
授权的权限可以由数据库管理员或其他授权者用REVOKE语句收回
-
语法格式
REVIKE<权限>[,<权限>]... ON<对象类型><对象名>[,<对象类型><对象名>]... FROM<用户>[,<用户>]... [CASCADE|RESTRICT];
- CASCADE:级联回收
- RESTRICT:受限回收
- 不允许循环授权的意义
【eg.4.8】把用户U4修改学生的权限收回来
REVOKE UPDATE(Sno),SELECT ON TABLE Student FROM U4;
【eg.4.9】收回所有用户对表SC的查询权限
REVOKE SELECT ON TABLE SC FROM PUBLIC;
【eg.4.10】把用户U5对SC表的INSERT权限收回
REVOKE INSERT ON TABLE SC FROM U5 CASCADE;
3. 创建数据库模式的权限
-
CREATE USER 语句格式
CREATE USER <usename> [WITH][DBA|RESOURCE|CONNECT]
4.2.5 数据库角色
- 数据库角色:被命名的一组与数据库操作相关的权限
- 角色是权限的集合
- 可以为一组具有相同权限的用户创建一个角色
- 简化授权的过程
1. 角色的创建
CREATE ROLE<角色名>
2. 给角色授权
GRANT <权限>[,<权限>]...
ON<对象类型>对象名
TO <角色>[,<角色>]...
3. 将一个角色授权其他的角色或用户
GRANT <角色1>[,<角色2>]...
TO <角色3>[,<用户1>]...
[WITH ADMIN OPTION]
指定了WITH ADMIN OPTION ,则获得权限的角色或用户还可以把这种权限授权给其他角色
授予者是角色的创建者或拥有在这个角色上的ADMIN OPTION
4. 角色权限的收回
REVOKE<权限>[,<权限>]...
ON<对象类型><对象名>
FROM <角色>[,<角色>]...
- 对象可以回收角色的权限
- REVOKE执行者是
- 角色的创建者,
- 拥有这个(些)角色上的ADMIN OPTION
【eg.4.11】通过角色来实现权限管理
步骤如下
-
首先创建一个角色R1
CREATE ROLE R1;
-
然后使用GRANT语句,使角色R1拥有Student表的SELECT UPDATE INSERT权限
GRANT SELECT ,UPDATE,INSERT ON TABLE Student TO R1;
-
然后将这个角色授予王平,张明,赵林,使他们具有角色R1包含的全部权限
GRANT R1 TO 王平,张明,赵林;
-
可以一次性通过R1来灰沙欧王平的这三个权限
REVOKE R1 FROM 王平;
【eg.4.12】增加角色的权限
GRANT DELETE
ON TABLE Student
TO R1;
使角色R1在原有的基础上增加了Student表的DELETE权限
【eg.4.13】减少角色的权限
REVOKE SELECT
ON TABLE Student
FROM R1;
使R1减少了SELECT权限
4.2.6 强制存取控制方法
-
自主存取控制缺点
- 可能出现数据的“无意泄露”
-
强制存取控制(MAC)
- 保证更高程度的安全性
- 用户不能直接感知或进行控制
- 适用于对数据有严格而固定密集分类的部门
- 军事部门
- 政府部门
-
在强制存取控制中,DBMS所管理的全体实体被分为主体和客体两大类
-
主体使系统中的活动实体(用户)
- DBMS所管理的实际用户
- 代表用户的各进程
-
客体是系统中的被动受体,受主体操纵(用户访问的对象)
- 文件、基本表、索引、视图
-
敏感度标记(Label)
- 对于主体和客体DBMS为他们每个实例(值)指派一个敏感度标记(Label)
- 敏感度标记分为若干级别
- 绝密(TS)
- 机密(s)
- 可信©
- 公开(P)
- TS>=S>=C>=P
- 主体的敏感度标记称为许可证级别
- 客体的敏感度标记称为密级
-
强制存取控制规则
- 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
- 仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
4.3 视图机制
- 把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
【eg.4.14】授权王平老师能查询计算机系学生的情况,授权系主任张明能对计算机系学生信息进行所有操作
-
先建立计算机系学生的视图CS_Student
CREATE VIEW CS_Student AS SELECT* FROM Student WHERE Sdept='CS';
-
在视图上进一步定义存取权限
GRNANT SELECT ON CS_Student TO 王平; GRANT ALL PRIVILGES ON SC_Student ON 张明;
4.4 审计
-
数据库安全性控制措施
- 预防性措施
- 用户身份鉴别
- 用户存取控制
- 强制存取控制
- 监控措施
- 审计
- 预防性措施
-
什么是审计
-
启用一个专门的审计日志
将用户对数据库的所有操作记录在上面
-
审计员利用审计日志
监控数据库中的各种行为
发现非法存取,发现潜在威胁
-
C2以上安全级别的DBMS必须具有审计功能
-
-
可以被审计的事件
- 服务器事件
- 系统事件
- 语句事件
- 模式对象事件
-
审计日志管理
-
审计功能的可选性
- 审计很费时间和空间
- DBA可以根据应用对安全性的要求,灵活的打开或关闭审计功能
-
审计功能设置
- AUDIT语句:设置审计功能
- NOAUDIT语句:取消审计功能
-
用户级审计
- 任何用户可设置的审计
- 主要是用户针对自己创建的数据库表和视图进行审计
-
系统级审计
- 只能由DBA来设置
- 监测成功或失败的登录要求,监测授权和回收操作以及其他数据库级权限以下的操作
【eg.4.15】对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTED,UPDATE
ON SC;
【eg.4.16】取消对SC表的一切审计
NOAUDIT ALTED,UPDATE
ON SC;
4.5 数据加密
- 防止数据库中数据在存储和传输过程中失密的有效手段
- 加密的基本思想
- 根据一定的算法将原始数据——明文变化成不可直接识别的格式——密文
- 加密方法
- 存储加密
- 传输加密
4.6 其他安全性保护
- 推理控制
- 处理强制存取控制未解决的问题,避免用户利用能够访问的数据推知更高机密的数据
- 常用方法
- 基于函数依赖 的推理控制
- 基于敏感关联 的推理控制
- 隐秘信道