第4章 数据库安全性
复习笔记
一、数据库安全性概述
数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。
01数据库的不安全因素
(1)非授权用户对数据库的恶意存取和破坏;
(2)数据库中重要或敏感的数据被泄露;
(3)安全环境的脆弱性数据库的安全性与计算机系统的安全性。
02安全标准简介
计算机以及信息安全技术领域最有影响的安全标准是TCSEC和CC这两个标准。
(1)安全标准发展
①TCSEC 是指 1985年美国国防部正式颁布的《可信计算机系统评估准则》(Trusted Computer System Evaluation Criteria, TCSEC)。
②CTCPEC、FC、TCSEC和TTSEC的发起了CC项目,他们建立了专门的委员会来开发CC通用准则。
③TCSEC又称桔皮书,TDI将TCSEC扩展到数据库管理系统。TDI中定义了数据库管理系统的设计与实现中需满足和用以进行安全性级别评估的标准。
(2)TCSEC/TDI
TCSEC/TDI 从以下四个方面来描述安全性级别划分的指标:安全策略、责任、保证和文档。每个方面又细分为若干项。
TCSECT/TDI将系统划分为四组七个等级,依次是D、C(C1,C2)、B(B1,B2,B3)、A(A1),按系统可靠或可信程度逐渐增高,如表4-1所示。
表4-1 TCSEC/TD1安全级别划分
安全级别 |
定义 |
A1 |
验证设计(verified design) |
B3 |
安全域(security domains) |
B2 |
结构化保护(structural protection) |
B1 |
标记安全保护(labeled security protection) |
C2 |
受控的存取保护(controlled access protection) |
C1 |
自主安全保护(discretionary security protection) |
D |
最小保护(minimal protection) |
①D级是最低级别。
②Cl 级只提供了非常初级的自主安全保护,能够实现对用户和数据的分离,进行自主存取控制(DAC),保护或限制用户权限的传播。
③C2级实际是安全产品的最低档次,提供受控的存取保护,即将C1级的DAC进一步细化,以个人身份注册负责,并实施审计和资源隔离。
④B1 级标记安全保护。对系统的数据加以标记,并对标记的主体和客体实施强制存取控制(MAC)以及审计等安全机制。B1 级别的产品才认为是真正意义上的安全产品,满足此级别的产品前一般多冠以“安全”(Security)或“可信的”(Trusted)字样,作为区别于普通产品的安全产品出售。
⑤B2级结构化保护。建立形式化的安全策略模型并对系统内的所有主体和客体实施DAC和MAC。
⑥B3级安全域。该级的TCB必须满足访问监控器的要求,审计跟踪能力更强,并提供系统恢复过程。
⑦A1级验证设计,即提供B3级保护的同时给出系统的形式化设计说明和验证以确信各安全保护真正实现。
(3)CC标准
CC提出了目前国际上公认的表述信息技术安全性的结构,即把对信息产品的安全要求分为安全功能要求和安全保证要求。
安全功能要求用以规范产品和系统的安全行为,安全保证要求解决如何正确有效地实施这些功能。安全功能要求和安全保证要求都以“类-子类-组件”的结构表述,组件是安全要求的最小构件块。
①CC的文本组成包括三部分:
a.简介和一般模型
介绍CC中的有关术语、基本概念和一般模型以及与评估有关的一些框架。
b.安全功能要求
列出了一系列类、子类和组件。由11大类、66个子类和135个组件构成。
c.安全保证要求
②评估保证级(Evaluation Assurance Level,EAL)
从EALl至EAL7共分为7级,按保证程度逐渐增高。如表4-2所示。
表4-2 CC评估保证级(EAL)的划分
评估保证级 |
定义 |
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 designed and tested) |
B3 |
EAL7 |
形式化验证的设计和测试(formally verified design and tested) |
A1 |
二、数据库安全性控制
在一般计算机系统中,安全措施是一级一级层层设置的。
在图 4-1所示的安全模型中,用户要求进入计算机系统时,系统首先根据输入的用户标识进行用户身份鉴定,只有合法的用户才准许进入计算机系统。对已进入系统的用户,DBMS还要进行存取控制,只允许用户执行合法操作。
图4-1 计算机系统的安全模型
01用户身份鉴别
用户身份鉴别是数据库管理系统提供的最外层安全保护措施。每个用户在系统中都有一个用户标识。每个用户标识由用户名(user name)和用户标识号(UID)两部分组成。UID在系统的整个生命周期内是唯一的。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供使用数据库管理系统的权限。
用户身份鉴别常用方法有:
(1)静态口令鉴别
静态口令一般由用户自己设定,鉴别时只要按要求输入正确的口令,系统将允许用户使用数据库管理系统。
(2)动态口令鉴别
这种方式的口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录数据库管理系统,即采用一次一密的方法。
(3)生物特征鉴别
这种方式通过采用图像处理和模式识别等技术实现了基于生物特征的认证,与传统的口令鉴别相比,无疑产生了质的飞跃,安全性较高。
(4)智能卡鉴别
智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能。智能卡由用户随身携带,登录数据库管理系统时用户将智能卡插入专用的读卡器进行身份验证。
02存取控制
数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接近数据,这主要通过数据库系统的存取控制机制实现。
(1)DBMS的安全子系统存取控制机制主要包括两部分:
①定义用户权限,并将用户权限登记到数据字典中
用户对某一数据对象的操作权力称为权限。某个用户应该具有何种权限是个管理问题和政策问题而不是技术问题。DBMS的功能是保证这些决定的执行。
②合法权限检查
每当用户发出存取数据库的操作请求后,DBMS查找数据字典,根据安全规则进行合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作。
用户权限定义和合法权检查机制一起组成了DBMS的安全子系统。
(2)DAC和MAC
大型的DBMS一般都支持C2级中的自主存取控制(简记为DAC),有些DBMS同时还支持B1级中的强制存取控制(简记为MAC)。
这两类方法的简单定义是:
①DAC
在自主存取控制方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。因此自主存取控制非常灵活。
②MAC
在强制存取控制方法中,每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。强制存取控制因此相对比较严格。
03自主存取控制方法
SQL标准对自主存取控制提供支持,主要通过SQL的GRANT语句和REVOKE语句来实现。用户权限是由两个要素组成的:数据库对象和操作类型。在数据库系统中,定义存取权限称为授权(authorization)。
在非关系系统中,用户只能对数据进行操作,存取控制的数据库对象也仅限于数据本身。在关系数据库系统中,存取控制的对象不仅有数据本身(基本表中的数据、属性列上的数据),还有数据库模式(包括数据库、基本表、视图和索引的创建等),表4-3列出了主要的存取权限。
表4-3 关系数据库系统中的存取权限
对象类型 |
对象 |
操作类型 |
数据库模式 |
模式 |
create schema |
基本表 |
create table,alter table |
|
视图 |
create view |
|
索引 |
create index |
|
数据 |
基本表和视图 |
select,insert,update,delete,references,all privileges |
属性列 |
select,insert,update,references,all privileges |
04授权:授予与收回
grant语句向用户授予权限,revoke语句收回授予的权限。
(1) grant
grant语句的一般格式为:
grant<权限>[,<权限>]…
on<对象类型><对象名>[,<对象类型><对象名>]…
to<用户>[,<用户>]…
[with grant option];
其语义为:将对指定操作对象的指定操作权限授予指定的用户。发出该grant语句的可以是DBA,也可以是该数据库对象创建者(即属主Owner),也可以是已经拥有该权限的用户。接受权限的用户可以是一个或多个具体用户,也可以是PUBLIC,即全体用户。
如果指定了with grant option子句,则获得某种权限的用户还可以把这种权限再授予其他的用户。如果没有指定with grant option 子句,则获得某种权限的用户只能使用该权限,不能传播该权限。
(2)revoke
授予用户的权限可以由数据库管理员或其他授权者用revoke语句收回,revoke语句的一般格式为:
revoke <权限>[,<权限>]…
on<对象类型><对象名>[,<对象类型><对象名>]…
from<用户>[,<用户>]…
[cascade|restrict];
数据库管理员拥有对数据库中所有对象的所有权限,并可以根据实际情况将不同的权限授予不同的用户。用户对自己建立的基本表和视图拥有全部的操作权限,并且可以用grant语句把其中某些权限授予其他用户。所有授予出去的权力在必要时又都可以用revoke语句收回。
(3)创建数据库模式的权限
grant和 revoke语句向用户授予或收回对数据的操作权限。对创建数据库模式一类的数据库对象的授权则由数据库管理员在创建用户时实现。
create user语句一般格式如下:
create user <username>[with][DBA|RESOURCE|CONNECT];
对create user 语句说明如下:
①只有系统的超级用户才有权创建一个新的数据库用户。
②新创建的数据库用户有三种权限:CONNECT、RESOURCE和DBA。
a. create user命令中如果没有指定创建的新用户的权限,默认该用户拥有 CONNECT 权限。拥有CONNECT权限的用户不能创建新用户,不能创建模式,也不能创建基本表,只能登录数据库。然后由DBA或其他用户授予他应有的权限,根据获得的授权情况他可以对数据库对象进行权限范围内的操作。
b.拥有 RESOURCE 权限的用户能创建基本表和视图,成为所创建对象的属主。但是不能创建模式,不能创建新的用户。数据库对象的属主可以使用grant语句把该对象上的存取权限授予其他用户。
c.拥有DBA权限的用户是系统中的超级用户,可以创建新的用户、创建模式、创建基本表和视图等;DBA 拥有对所有数据库对象的存取权限,还可以把这些权限授予一般用户。
以上说明可以用表4-4来总结。
表4-4 权限与可执行的操作对照表
拥有的权限 |
可否执行的操作 |
|||
create user |
create schema |
create table |
登录数据库,执行数据查询和操纵 |
|
DBA |
可以 |
可以 |
可以 |
可以 |
RESOURCE |
不可以 |
不可以 |
可以 |
可以 |
CONNECT |
不可以 |
不可以 |
不可以 |
可以,但必须拥有相应权限 |
create user语句不是SQL标准,因此不同的关系数据库管理系统的语法和内容相差甚远。
05数据库角色
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。在SQL中用create role语句创建角色,用grant语句给角色授权,用revoke语句收回授予角色的权限。
(1)角色创建
创建角色的SQL语句格式是"create role<角色名>"。
刚刚创建的角色是空的,没有任何内容。
(2)角色授权
角色授权的SQL语句格式是:
grant<权限>[,<权限>]…
on<对象类型>对象名
to<角色>[,<角色>]…
DBA和用户可以利用grant语句将权限授予某一个或几个角色。
(3)将一个角色授予其他的角色或用户
将角色授权给其他角色或用户的SQL语句格式是:
grant<角色1>[,<角色2>]…
to<角色3>[,<用户1>]…
[with admin option]
该语句把角色授予某用户,或授予另一个角色。这样,一个角色(角色3)所拥有的权限就是授予它的全部角色(角色1和角色2)所包含的权限的总和。
一个角色包含的权限包括直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限。
(4)角色权限的收回
回收角色权限的SQL语句格式是:
revoke<权限>[<权限>]…
on<对象类型><对象名>
from<角色>[,<角色>]…
用户可以回收角色的权限,从而修改角色拥有的权限。
revoke动作的执行者或者是角色的创建者,或者拥有在这个(些)角色上的admin option。
06强制存取控制方法
自主存取控制(MAC)能够通过授权机制有效地控制对敏感数据的存取。强制存取控制是指系统为保证更高程度的安全性,按照TDL/TCSEC标准中安全策略的要求所采取的强制存取检查手段。
(1)MAC中的主客体
在 MAC 中,DBMS 所管理的全部实体被分为主体和客体两大类。对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)。
①主体
主体是系统中的活动实体,既包括 DBMS 所管理的实际用户,也包括代表用户的各进程。主体的敏感度标记称为许可证级别。
②客体
客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等。客体的敏感度标记称为密级。
MAC机制就是通过对比主体的Label和客体的Label,最终确定主体是否能够存取客体。
(2)存取规则
当某一用户(或某一主体)以标记Label注册入系统时,系统要求他对任何客体的存取必须遵循如下规则:
①仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体。
②仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。
强制存取控制(MAC)是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。
(3)MAC与DAC的联系
较高安全性级别提供的安全保护要包含较低级别的所有保护,因此在实现MAC时要首先实现DAC,即DAC 与MAC共同构成DBMS的安全机制,如图4-2所示。
系统首先进行DAC检查,对通过DAC检查的允许存取的数据库对象再由系统自动进行MAC检查,只有通过MAC检查的数据库对象方可存取。
图4-2 DAC、MAC安全检查示意图
三、视图机制
根据不同的用户定义不同的视图,把数据对象限制在一定的范围内,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
视图机制间接地实现支持存取谓词的用户权限定义。
四、审计
01定义
审计功能把用户对数据库的所有操作自动记录下来放入审计目志(audit log)中。审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
02审计事件
(1)服务器事件
审计数据库服务器发生的事件,包含数据库服务器的启动、停止、数据库服务器配置文件的重新加载。
(2)系统权限
对系统拥有的结构或模式对象进行操作的审计,要求该操作的权限是通过系统权限获得的。
(3)语句事件
对SQL语句,如 DDL、DML、DQL(Data Query Language,数据查询语言)及DCL语句的审计。
(4)模式对象事件
对特定模式对象上进行的SELECT或DML操作的审计。
03审计功能
(1)基本功能。
(2)提供多套审计规则。
(3)提供审计分析和报表功能。
(4)审计日志管理功能。
(5)系统提供查询审计设置及审计记录信息的专门视图。
04audit语句和noaudit语句
audit语句用来设置审计功能,noaudit语句则取消审计功能。
05分类
(1)用户级审计
用户级审计是任何用户可设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一切成功和(或)不成功的访问要求以及各种类型的SOL操作。
(2)系统级审计
系统级审计只能由数据库管理员设置,用以监测成功或失败的登录要求、监测授权和收回操作以及其他数据库级权限下的操作。
五、数据加密
01定义
数据加密是防止数据库数据在存储和传输中失密的有效手段。加密的基本思想是根据一定的算法将原始数据-明文(plain text)变换为不可直接识别的格式-密文(cipher text),从而使得不知道解密算法的人无法获知数据的内容。
02分类
(1)存储加密
对于存储加密,一般提供透明和非透明两种存储加密方式。透明存储加密是内核级加密保护方式,对用户完全透明;非透明存储加密则是通过多个加密函数实现的。
(2)传输加密
①链路加密
链路加密对传输数据在链路层进行加密,它的传输信息由报头和报文两部分组成,前者是路由选择信息,而后者是传送的数据信息。这种方式对报文和报头均加密。
②端到端加密
端到端加密对传输数据在发送端加密,接收端解密。它只加密报文,不加密报头。
(3)通信加密步骤
①确认通信双方端点的可靠性
②协商加密算法和密钥
③可信数据传输
六、其他安全性保护
01隐蔽信道
隐蔽信道(covert channal)处理内容是强制存取控制未解决的问题。
02数据隐私保护
数据隐私是控制不愿被他人知道或他人不便知道的个人数据的能力。数据隐私范围很广,涉及数据管理中的数据收集、数据存储、数据处理和数据发布等各个阶段。