数据库安全性
数据库安全性概述
数据库的安全性是指保护数据库以防止不合法使用所造成的 数据泄露、更改或破坏 。
数据库的不安全因素
- 非授权用户对数据库的恶意存取和破坏
- 数据库中重要或敏感的数据被泄露
- 安全环境的脆弱性
安全标准简介
计算机和信息安全技术方面有一系列的安全标准,最有影响的是 TCSEC 和 CC 这两个标准。
TCSEC 又称 桔皮书 ,而 TCSEC/TDI 即 紫皮书 ,将 TCSEC 扩展到 DBMS。
TCSEC/TDI 中定义了 DBMS 的设计与实现中需要满足和用以进行安全性级别评估标准,从 4 个方面来描述安全性级别划分的指标,即:
- 安全策略
- 责任
- 保证
- 文档。
根据计算机系统对各项指标的支持情况,TCSEC/TDI 将系统划分为 4 组(division)7 个等级如下:
安全级别 | 定义 | 功能 | 备注 |
---|---|---|---|
A1 | 验证设计(verified design) | 提供 B3 级保护的同时给出系统的形式化设计说明和验证以确信各安全保护真正实现 | |
B3 | 安全域(security domains) | 该级的 TCB 必须满足访问监控器的要求,审计跟踪能力更强,并提供系统恢复过程 | |
B2 | 结构化保护(structural protection) | 建立形式化的安全策略模型并对系统内的所有主体和课题实施 DAC 和 MAC | |
B1 | 标记安全保护(labeled security protection) | 对系统的数据加以标记,对标记的主体和客体实施强制存取控制(MAC)、审计等安全机制 | |
C2 | 受控的存取保护(controlled access protection) | 提供受控的存取保护,将 C1 级的 DAC 进一步细化,以个人身份注册负责,并实施审计和资源隔离 | 安全产品的最低档次,如 Windows2000, Oracle7 |
C1 | 自主安全保护(discretionary security protection) | 实现对用户和数据的分离,进行自主存取控制(DAC),保护或限制用户权限的传播 | 非常初级的自主安全保护,只需将现有商业系统稍作改进即可满足 |
D | 最小保护(minimal protection) | 最低级别,将一切不符合更高标准的系统都归为 D 组 | 例如 DOS 就是 D 级的典型例子 |
较高安全性级别提供的安全保护要包含较低级别的所有保护要求,同时提供更多或更完善的保护能力。
CC 实在上述各评估准则及具体实践的基础上通过相互总结和互补发展而来的。CC 提出了目前国际上公认的表述信息技术安全性的结构:
- 安全功能要求 :用以规范产品和系统的安全行为。
- 安全保证要求 :要求解决如何正确有效地实施这些功能。
安全功能要求和安全保证要求都以“类-子类-组件“的结构表述,组件是安全要求的最小构减块。
CC 文本由 三部分 构成:
- 简介和一般模型 :介绍 CC 中的有关术语、基本概念和一般模型以及与评估有关的一些框架。
- 安全功能要求 :列出一系列类、子类和组件,由 11 大类、66 子类和 135 组件构成。
- 安全保证要求 :列出一系列保证类、子类和组件,包括 7 大类、26 子类和 74 组件。评估保证级(7 级)如下
评估保证级 | 定义 | TCSEC 安全级别(近似相当) |
---|---|---|
EAL1 | 功能测试(functionally tested) | |
EAL2 | 结构测试(structurally tested) | C1 |
EAL3 | 系统地测试和检查(methodically tested and checked) | C2 |
EAL4 | 系统地设计、测试和复查(methodically designed,tested and reviewed) | B1 |
EAL5 | 半形式化设计和测试(semiformally designed and tested) | B2 |
EAL6 | 半形式化验证的设计和测试(semiformally verified design and tested) | B3 |
EAL7 | 形式化验证的设计和测试(formally verified design and tested) | A1 |
数据库安全性控制
在一般计算机系统中,安全措施是一级一级层层设置的。
计算机系统安全模型
- 用户要求进入系统时,系统首先根据输入的用户标识进行用户身份鉴定,合法用户才可以进入计算机系统。
- 对已进入系统的用户,DBMS 还要进行存取控制,只允许用户执行合法操作。
- 操作系统有自己的保护措施。
- 数据可以以莫玛形式存储到数据库中。
数据库安全保护存取流程
- 首先,DBMS 对提出 SQL 访问请求的数据库用户进行 身份鉴别 ,防止不可信用户使用系统。
- 然后,在 SQL 处理层进行 自主存取控制和强制存取控制 ,进一步还可以进行推理控制。
- 为监控恶意访问,可以根据具体安全需求 配置审计规则 ,对用户访问行为和系统关键操作进行审计。
通过设置简单入侵检测规则,对异常用户行为进行检测和处理。在数据存储层,DBMS 不仅存放用户数据,还存储与安全有关的标记和信息(称为安全数据),提供存储加密功能。
用户身份鉴别
用户身份鉴别是 DBMS 提供的最外层安全保护措施。
每个用户在系统中都有一个用户标识:
- 用户名(user name)
- 用户标识号 (UID),UID 在系统整个生命周期内是 唯一的 。
常用的用户身份鉴别方法:
- 静态口令鉴别
- 动态口令鉴别
- 生物特征鉴别
- 智能卡鉴别
存取控制
数据库安全最重要的一点就是确保指授权给有资格的用户访问数据库的权限,令所有未被授权的人员无法接近数据。
存取控制机制主要包括定义用户权限和合法权限检查两部分 ,它们一起组成了 DBMS 的存取控制子系统。
定义用户权限,并将用户权限登记到数据字典中
- 权限:用户对某一数据对象的操作权力称为权限。
- 安全规则或授权规则:DBMS 提供的定义用户权限的语言,这些定义编译后存储在数据字典中。
合法权限检查
- 用户发出存取数据库的请求后,DBMS 查找数据字典,根据安全规则进行合法权限检查,若操作请求超出了定义的权限,系统将拒绝执行该操作。
常用的存取控制方法
自主存取控制(C2 级 DBMS 支持,较为灵活)
- 用户对不同的数据对象有不同的存取权限
- 不同的用户对同一对象也有不同的权限
- 用户还可以将其拥有的存取权限转授给其他用户
强制存取控制(B1 级 DBMS 支持,相对比较严格)
- 每一个数据对象被标以一定的密级
- 每一个用户也被授予某一个级别的许可证
- 对于任意一个对象,只有具有合法许可证的用户才可以存取
自主存取控制(DAC)方法
用户权限两要素:数据库对象、操作类型。
授权:定义存取权限。
在非关系系统中,用户只能对数据进行操作,存取控制的数据库对象也仅限于数据本身。
在关系数据库系统中, 存取控制的对象有 :
- 数据本身 :基本表中的数据、属性列上的数据。
- 数据库模式 :数据库、基本表、视图和索引的创建等。
对象类型 | 对象 | 操作类型 |
数据库模式 | 模式 | CREATE SCHEMA |
基本表 | CREATE TABLE, ALTER TABLE | |
视图 | CREATE VIEW | |
索引 | CREATE INDEX | |
数据 | 基本表和视图 | SELECT,INSERT,UPDATE,DELETE,REFERENCES,ALL PRIVILEGES |
属性列 | SELECT,INSERT,UPDATE,REFERENCES,ALL PRIVILEGES |
授权:授予与取回
GRANT
GRANT 语句一般格式为:
GRANT <权限>[,<权限>]
ON <对象类型><对象名>[,<对象类型><对象名>]···
TO <用户>[,<用户>]···
[WITH GRANT OPTION]; /*指定该语句,则获得该权限的用户可以把这种权限再授予给其他用户*/
语义:将对指定操作对象的指定操作权限授予指定用户。
发出者:DBA;数据库对象创建者(属主 owner);拥有该权限的用户。
接收者:一个或多个具体用户;PUBLIC,即全体用户。
例:把查询Student表的权限授权给用户U1。
GRANT SELECT
ON TABLE Student
TO U1;
例:把对Student表和Course表的全部操作权限授予用户U2和U3。
GRANT ALL PRIVILEGES
ON TABLE Student,Course
TO U2,U3;
例:把对表SC的查询权限授予所有用户。
GRANT SELECT
ON TABLE SC
TO PUBLIC;
例:把查询Student表和修改学生学号的权限授予给用户U4。
GRANT UPDATE(Sno),SELECT /*对属性列授权需明确指出相应的属性列名*/
ON TABLE Student
TO U4;
例:把对表SC的INSERT权限授予U5用户,并允许将此权限在授予其他用户。
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
例:U5将此权限授予U6。
GRANT INSERT
ON TABLE SC
TO U6
WITH GRANT OPTION;
例:U6将此权限授予U7。
GRANT INSERT
ON TABLE SC
TO U7; /*无传播权限*/
REVOKE
REVOKE 语句一般格式为:
REVOKE <权限>···
ON <对象类型><对象名>[,<对象类型><对象名>]···
FROM <用户>[,<用户>]···[CASCADE|RESTRICT];
授权用户的权限可以由 DBA 或其他授权者用 REVOKE 语句收回。
例:把用户U4修改学生学号的权限收回。
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
例:收回所有用户对表SC的查询权限。
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;
例:把用户U5对SC表的INSERT权限收回。
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE; /*在收回U5的权限的同时,因为级联(CASCADE)收回了U6和U7的权限*/
用户可以“自主”地决定将数据地存取权限授予何人、决定是否也将”授权”地权限授予别人,因此这样地存取控制是自主存取控制。
创建数据库模式的权限
对创建数据库模式一类的数据库对象的授权则由数据库管理员在创建用户时实现。
CREATE USER 语句一般格式为:
CREATE USER <username> [WITH][DBA|RESOURCE|CONNECT];
- 只有系统的超级用户才有权创建一个新的数据库用户。
- 新创建的数据库用户有三种权限:CONNECT、RESOURCE 和 DBA。
- CREATE USER 命令中如果没有指定创建的新用户的权限,则默认为 CONNECT 权限,该权限只能登陆数据库。
- RESOURCE 权限能创建基本表和视图,但不能创建模式、新用户。
- 拥有 DBA 权限的用户是系统中的超级用户,可以创建新用户、模式、基本表和视图;同时拥有对所有数据库对象的存取权限,还可以将这些权限授予一般用户。
拥有的权限 | 可否执行的操作 | |||
CREATE USER | CREATE SCHEMA | CREATE TABLE | 登录数据库,执行数据查询和操纵 | |
DBA | 可以 | 可以 | 可以 | 可以 |
RESOURCE | 不可以 | 不可以 | 可以 | 可以 |
CONNECT | 不可以 | 不可以 | 不可以 | 可以,但必须拥有相应权限 |
注:CREATE USER 语句不是 SQL 标准,不同的 RDBMS 的语法和内容不一样。
数据库角色
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。
数据库角色的作用:
- 角色是权限的集合。
- 可以为一组具有相同权限的用户创建一个角色。
- 使用角色管理数据库权限可以简化授权过程。
在 SQL 中先使用 CREATE ROLE 语句创建一个角色,然后用 GRANT 语句给角色授权,用 REVOKE 语句收回授予角色的权限。
1.创建角色
CREATE ROLE<角色名> /*刚刚创建的角色是空的*/
2.给角色授权
GRANT <权限>[,<权限>]···
ON <对象类型>对象名
TO <角色>[,<角色>]···
3.将一个角色授予其他角色或用户
GRANT <角色1>[,<角色2>]···
TO <角色3>[,<用户1>]···
[WITH ADMIN OPTION] /*获得权限的角色或用户可以将这种权限在授予其他角色*/
4.角色权限的回收
REVOKE <权限>[,<权限>]···
ON <对象类型><对象名>
FROM <角色>[,<角色>]···
例:通过角色来实现将一组权限授予一个用户。
1.首先创建一个角色R1。
CREATE ROLE R1;
2.使用GRANT语句,使角色R1拥有Student表的SELECT、UPDATE、INSERT权限。
GRANT SELECT,UPDATE,INSERT
ON Student
TO R1;
3.将这个角色授予王平、张明、赵玲,使他们具有角色R1所包含的全部权限。
GRANT R1
TO 王平,张明,赵玲;
4.收回王平的三个权限。
REVOKE R1
FROM 王平;
例:角色权限的修改。
GRANT DELETE
ON TABLE Student
TO R1; /*为角色R1增加对Student表的DELETE权限*/
REVOKE SELECT
ON TABLE Student
FROM R1; /*使角色R1减少SELECT权限*/
强制存取控制(MAC)方法
自主存取控制缺点:
- 在自主存取控制的授权机制下,可能存在数据的”无意泄露“。
- 原因:因为这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记。
强制存取控制特点:
- 保证更高程度的安全性。
- 用户不能直接感知或进行控制。
- 适用于对数据有严格而固定密级分类的部门,如:军事部门;政府部门等。
在强制存取控制种,DBMS 所管理的全部实体被分为主体和客体两大类。
- 主体:系统中活动的实体,既包括 DBMS 所管理的实际用户,也包括代表用户的各进程。
- 客体:系统中的被动实体,受主体操纵,包括文件、基本表索引、视图等。
敏感度标记(label):
对主体和客体,DBMS 为他们每一个实例(值)指派一个敏感度标记。
敏感度标记被分成若干级别
- 绝密(TOP Secret,TS)
- 机密(Secret,S)
- 可信(Confidential,C)
- 公开(Public,P)
- 密级次序:TS >= S >= C >= P
主体的敏感度标记称为许可证级别(clearance level)
客体的敏感度标记称为密级(classification level)
当某一用户(或某一主体)以标记 label 注册系统时,系统要求他对任何客体的存取必须遵循以下规则:
仅当主体的许可证级别大于或等于客体的密级,该主体才能读取相应的客体。
仅当主体的许可证级别小于或等于客体的密级,该主体才能写相应的客体。
- 对于规则 2,用户可以为写入的数据赋予高于自己的许可证级别的密级,这样数据一旦写入,该用户自己也不能读该数据了,若违反了规则 2,就有可能把数据的密级从高流向低,造成数据泄露。
强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分割的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供更高级别的安全性。
注: 实现强制存取控制时要首先实现自主存取控制 ,自主存取控制与强制存取控制共同构成 DBMS 的安全机制。
视图机制
通过视图机制,把要保密的数据对无权存取的用户隐藏起来。
视图机制间接地实现支持存取谓词地用户权限定义。
例:建立计算机系学生的视图,把对该视图的SELECT权限授予王平,把该视图上的所有操作权限授予张明。
CREATE VIEW CS_Student /*首先建立视图CS_Student*/
AS
SELECT *
FROM Student
WHERE Sdept='CS';
GRANT SELECT /*王平只能检索计算机系学生的信息*/
ON CS_Student
TO 王平;
GRANT ALL PRIVILEGES /*系主任具有检索和增删改计算机系学生信息的所有权限*/
ON CS_Student
TO 张明;
审计
审计功能把用户对数据库的所有操作自动记录下来放入审计日志(audit log)种,审计员利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列时间,找出非法存取数据的人、时间和内容。
C2 以上的安全级别的 DBMS 必须具有审计功能。
审计一般设置为可选项,原因为:
- 审计很费时间和空间。
- DBA 可以根据应用对安全性的要求,灵活地打开或关闭审计功能。
- 审计功能主要用户安全性要求较高的部门。
审计事件
审计事件一般有多个类别,例如:
- 服务器事件:审计数据库服务器发生的事件,包含数据库服务器的启动、停止、数据库服务器配置文件的重新加载。
- 系统权限:对系统拥有的结构或模式对象进行操作的审计,要求该操作的权限是通过系统权限获得的。
- 语句事件:对 SQL 语句,如 DDL、DML、DQL、及 DCL 语句的审计。
- 模式对象事件:对特定模式对象上进行的 SELECT 或 DML 操作审计。模式对象包括表、视图、存储过程、函数等。模式对象不包括依附于表的索引、约束、触发器、分区表等。
审计功能
审计功能主要包括一下几方面内容:
- 基本功能,提供多种审计查阅方式:基本的、可选的、有限的,等等。
- 提供多套审计规则,审计规则一般在数据库初始化时设定,以方便审计员管理。
- 提供审计分析和报表功能。
- 审计日志管理功能。
- 系统提供查询审计设置及审计记录信息的专门视图。
AUDIT 语句和 NOAUDIT 语句
AUDIT 语句用来设置审计功能,NOAUDIT 语句则取消审计功能。
审计分为用户级审计和系统级审计。
- 用户级审计:是任何用户可设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一切成功或不成功的访问要求以及各种类型的 SQL 操作。
- 系统级审计:只能由 DBA 设置,用以监测成功或失败的登陆要求、监测授权和收回操作以及其他数据库级权限下的操作。
例:对修改SC表结构或修改SC表数据的操作进行审计。
AUDIT ALTER,UPDATE
ON SC;
例:取消对SC表的一切审计。
NOAUDIT ALTER,UPDATE
ON SC;
数据库安全审计系统提供了一种时候检查的安全机制。
数据加密
数据加密是防止数据库中数据在存储和传输中失密的有效手段。
基本思想:根据一定算法,将原始数据(明文)变换为不可直接识别的格式(密文)。
数据加密主要包括存储加密和传输加密。
其他安全性保护
为满足较高安全等级 DBMS 的安全性保护要求,在 DAC 和 MAC 之外,还有推理控制一级数据库应用中隐蔽通信和数据隐私保护等技术。