数据库安全
4.1 数据库安全概述
数据库的不安全因素
- 非授权用户对数据库的恶意存取和破坏
- 数据库中重要或敏感的数据被泄露
- 安全环境的脆弱性
安全标准简介
- TCSEC标准
- CC标准
4.2 数据库安全性控制
计算机中的系统安全性控制
计算机系统中,安全措施是一级一级层层设置的。
- 系统根据用户表示鉴定用户身份,合法用户才准许进入计算机系统
- 数据库管理系统进行存取控制,只允许用户执行合法操作
- 操作系统有自己的保护措施
- 数据以密码形式存储到数据库中
数据库安全性控制
数据库安全性控制的常用方法
1. 用户身份鉴别
- 系统提供的最外层安全保护措施
- 用户标识:由用户名和用户标识号组成(用户标识号在系统整个生命周期内唯一)
鉴别方法
- 静态口令鉴别
静态口令一般由用户自己设定,这些口令是静态不变的。 - 动态口令鉴别
口令是动态变化的,每次鉴别时均需使用动态产生新的口令登录数据库管理系统,即采用一次一密的方法。 - 智能卡鉴别
智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能。 - 生物特征鉴别
通过生物特征进行认证的技术,生物特征如指纹,虹膜,掌纹。
合法用户也有可能做不合法的操作。为了使合法用户只能访问他们有权访问的那部分数据,需要对数据库进行存取控制。
2. 存取控制
存取控制组成
- 定义用户权限,并将用户权限登记到数据字典中
- 用户对某一数据对象的操作权力称为权限
- DBMS提供适当的语言来定义用户权限,存放在数据字典中,称作安全规则或授权规则。
- 合法权限检查
- 用户发出存取数据库操作请求
- DBMS查找出数据字典,进行合法权限检查。
用户权限定义和合法权检查机制一起组成了DBMS的存取控制子系统。
自主存取控制方法
- 用户对不同的数据对象有不同的存取权限
- 不同的用户对同一对象也有不同的权限
- 用户还可将其拥有的存取权限转授给其他用户
- 通过SQL的
GRANT
和REVOKE
语句实现。
定义一个存取权限就是定义一个用户在哪些对象上能执行哪些操作。
授权:授予与回收
1. 权限授予:GRANT
GRANT语句的一般格式
GRANT<权限>[,<权限>]...
ON<对象类型><对象名>[,<对象类型><对象名>]...
TO<用户>[,<用户>]...
[WITH GRANT OPTION]; //指定该子句:可以再转授权限,没有指定则不能传播权限
WITH GRANT OPTION
- 语义:将指定操作对象的指定操作权限授予指定的用户。
- 不允许循环授权
- 发出GRANT的人员
- 数据库管理员
- 数据库对象创建者(即属主Owner)
- 拥有该权限的用户
- 按受权限的用户
- 一个或多个具体用户
- PUBLIC(即全体用户)
- 全部权限可以用
ALL PRIVILEGES
代替 - 所有用户可以用
PUVLIC
代替
2. 权限回收:REVOKE
REVOKE语句的一般格式为:
REVOKE<权限>[,<权限>]...
ON<对象类型><对象名>[,<对象类型><对象名>]...
FROM<用户>[,<用户>]...[CASCADE|RESTRICT];
CASCADE
:级联回收
DBMS不允许循环授权正是因为如果级联回收找不到授受权限的起始点。RESTRICT
:受限回收
数据库角色
- 被命名的一组与数据库操作相关的权限
- 角色是权限的集合
- 可以为一组具有相同权限的用户创建一个角色
- 简化授权的过程
角色的创建
CREATE ROLE<角色名>
给角色授权
GRANT <权限>[,<权限>]...
ON<对象类型>对象名
TO<角色>[,<角色>]...
将角色授予其他的角色或用户
GRANT <角色1>[,<角色2>]...
TO <角色3>[,<用户>]...
[WITH ADMIN OPTION]
- 指定
WITH ADMIN OPTION
,则获得权限的角色或用户还可以把这种权限授予其他角色。 - 授予这是角色的创建者或拥有在这个角色上的ADMIN OPTION。
角色权限的回收
REVOKE <权限>[,<权限>]...
ON <对象类型><对象名>
FROM <角色>[,<角色>]...
- 用户可以回收角色的权限,从而修改角色拥有的权限
- REVOKE执行者是
- 角色的创建者
- 拥有在这个(些)角色上的ADMIN OPTION
例题
- 通过角色来实现权限管理。
创建一个角色R1
CREATE ROLE R1;
使用GRANT语句,使角色R1拥有Student表的SELECT\UPDATE\INSERT权限
GRANT SELECT,UPDATE,INSERT
ON TABLE Student
TO R1;
将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限
GRANT R1
TO 王平,张明,赵玲;
可以一次性通过R1来回收王平的这3个权限
REVOKE R1
FROM 王平;
- 增加角色的权限
GRANT DELETE
ON TABLE Student
TO R1;
使角色R1在原来的基础上增加了Student表的DELETE权限。
- 减少角色的权限
REVOKE SELECT
ON TABLE Student
FROM R1;
使R1减少了SELECT权限
自主存取控制缺点
可能存在数据的“无意泄露”
例:只有财务人员有权访问职工工资表EMP-Salary
CREATE TABLE Salary-copy
AS SELECT Eno, Name, Salary
FROM EMP-Salary;
//复制表内容
GRANT SELECT
ON TABLE Salary-copy
TO PUBLIC;
//所有人都可以访问职工工资
自主存取控制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全标记。
强制存取控制方法
强制存取控制(MAC)
- 保证更高程度的安全性
- 用户不能直接感知或进行控制
- 适用于对数据又严格而固定密级分类的部门
- 军事部门
- 政府部门
强制存取控制中,数据库管理系统所管理的全部实体被分为主题和客体两大类
-
主体是系统中的活动实体
- 数据库管理系统所管理的实际用户
- 代表用户的各进程
-
客体是系统中的被动实体,受主题操纵
- 文件、基本表、索引、视图
敏感度标记(Label)
自主存取控制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记。
- 绝密(TS)
- 机密(S)
- 可信 (C)
- 公开(P)
- TS>=S>=C>=P
主体的敏感度标记称为许可证级别
客体的敏感度标记为密级
强制存取控制规则
(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
(2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体。
- 实现强制存取控制MAC时要首先实现自主存取控制DAC
- 原因:较高安全性级别提供的安全保护要包含较低级别的所有保护
- 自主存取控制DAC与强制存取控制MAC共同构成数据库管理系统的安全机制
3. 视图
把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护。
授权只能访问整张表或者表中的列。
授予用户查询整个表的权限
GRANT SELECT
ON TABLE Student
TO U1;
授权用户查询某些列的权限
GRANT SELECT(Sno, Sname)
ON TABLE Student
TO U2;
授予用户查询某些行的权限?
- 需要用存取谓词来定义用户权限
- 无法直接用GRANT语句实现
- 可以用视图机制间接地实现
例:
授权王平老师能查询计算机系学生的情况,授权系主任张明能对计算机系学生地信息进行所有的操作。
step1:
先建立计算机系学生的视图CS_Student
CREATE VIEW CS_Student
AS
SELECT *
FROM Student
WHERE Sdept='CS';
step2:
在视图上进一步定义存取权限
GRANT SELECT
ON CS_Student
TO 王平;
GRANT ALL PRIVILIGES
ON CS_Student
TO 张明;
4. 审计
监控措施
-
启用一个专用地审计日志(Audit Log)
将用户对数据库的所有操作记录在上面 -
审计员利用审计日志
监控数据库中的各种行为
发现非法存取,发现潜在威胁 -
C2以上安全级别的DBMS必须具有审计功能
可以被审计的事件
- 服务器事件
- 审计数据库服务器发生的事件
- 系统权限
- 对系统拥有的结构或模式对象进行操作的审计
- 要求该操作的权限是通过系统权限获得的
- 语句事件
- 对SQL语句,如DDL\DML\DQL以及DCL语句的审计
- 模式对象事件
- 对特定模式对象上进行的SELECT或DML操作的审计
审计功能的可选性
- 审计很费时间和空间
- DBA可以根据应用对安全性的要求,灵活地打开或关闭审计功能
- 审计功能主要用于安全性要求较高的部门
审计功能设置
AUDIT语句:设置审计功能
NOAUDIT语句:取消审计功能
例:
对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTER, UPDATE
ON SC;
取消对SC表的一切审计
NOAUDIT ALTER, UPDATE
ON SC;
5. 数据加密
防止数据库中数据在存储和传输中失密的有效手段。
加密方法
- 存储加密
- 传输加密