随着关系型数据库在计算机应用领域越来越多的应用,数据的安全问题越来越受到重视。如果对数据库中的数据进行加密处理,那么数据库的安全性就能有所提高。所以,数据库加密是解决关系型数据库安全问题最为有效的一种方法。

一、关系型数据库加密的必要性

关系型数据库系统的安全不仅依赖自身内部的安全机制,还与外部网络环境、应用环境、从业人员素质等因素息息相关。因此,从广义上讲,数据库系统的安全框架可以划分为三个层次,即网络系统层次、宿主操作系统层次、数据库管理系统层次。

这三个层次构筑成数据库系统的安全体系,与数据安全的关系是逐步紧密的,防范的重要性也逐层加强,从外到内、由表及里保证数据的安全。但是,值得注意的是OS和DBMS对数据库文件本身仍然缺乏有效的保护措施,无法阻挡对数据文件本身的攻击。

在传统的关系型数据库系统中,数据库管理员的权力是至高无上,他既负责各项系统管理工作,又可以查询数据库中的一切信息。为此,不少系统以种种手段来削弱系统管理员的权力。实现关系型数据库加密以后,各用户(或用户组)的数据由用户用自己的密钥加密,数据库管理员获得的信息无法进行正常解密,从而保证了用户信息的安全。

二、关系型数据库加密的要求与限制

1、关系型数据库加密的要求

由于关系型数据库本身的特点和实际应用需求,对关系型数据库加密一般应实现以下功能:

(1)由于关系型数据库数据信息的生命周期一般比较长,所以加强加密的力度,难以破译;

(2)加密系统应同时提供一套安全的、灵活的密钥管理机构,提供灵活的加密要求满足;

(3)加密后的关系型数据库仍能满足用户在不同类别程度上的访问。

(4)数据文件加密后,不能明显地扩大存储空间;

(5)不能影响数据库的使用速度,即加/解密速度都应足够快;

2、关系型数据库加密的限制

数据加密通过对明文进行复杂的加密操作,以达到无法发现明文和密文之间、密文和密钥之间的内在关系,复杂性已经破译的难度要求足够高,也就是说经过加密的数据经得起来自DS和DBMS的攻击。另一方面,DBMS要完成对数据库文件的管理和使用,必须具有能够识别部分数据的条件。因此,只能对数据库中数据进行部分加密。以下几点是我们在给关系型数据库加密时应该注意的问题。

(1)索引字段不能加密为了达到快速查询的目的,关系型数据库文件需要建立一些索引,它们的建立和应用必须是明文状态,否则将失去索引的作用。

(2)关系运算的比较字段不能加密DBMS要组织和完成关系运算,运算的数据一般都要经过条件筛选,这种“条件”选择项必须是明文,否则DBMS将无法进行比较筛选。

(3)表间的连接码字段不能加密关系型数据库中表之间存在着密切的联系,这种相关性往往是“外部编码”联系的,这些编码若加密就无法进行表与表之间的连接运算。

三、关系型数据库加密方式

关系型数据库加密,主要分为两种方式:DBMS外部加密和DBMS内部加密。

1、DBMS外部加密

(1)DBMS外部加密的优点

不需要修改DBMS,只需要在应用程序或者操作系统中增加相应的加/解密模块即可。

(2)DBMS外部加密的缺点

首先它不能支持各种加密粒度。

其次,它仅仅对用户数据进行加密,而不能对元数据、索引数据、日志等进行加密。

因此,安全性受到影响。再者,数据的完整性检查需要应用程序来完成,不能尽量发挥DBMS的作用,因为数据加密后,没有办法在DBMS完整性检查,而需要在应用程序中增加这项功能,实现起来非常麻烦。

2、DBMS内部加密

一般选择在数据物理存取之前进行加/解密操作。

DBMS内部加密优点

由于DBMS能够区分各种粒度的数据,所以,可以支持各种粒度的加密,加密粒度可以灵活地选择。另外,在DBMS内部实现加密,可以更有效地利用DBMS内部的访问控制机制、授权机制等各种功能。更重要的是,关系型数据库一个重要特点是被多个应用共享,这种方法的加解密都是在DBMS内部完成,对应用程序是透明的,不需要在多个应用中进行修改,使用起来比较方便,且容易保持数据的一致性,缺点是需要修改DBMS的内核。关系型数据库的关键术语有:数据库、表、字段、行和数据元素。基本上可以针对这几方面形成一种加密的方法:

(1)数据库级加密

加密的对象是整个数据库,对数据库中所有的对象进行加密处理。这种加密方法只需要对存储在磁盘中的相应数据库文件进行加密处理即可,密钥的数量少,便于管理。但是,采用此加密粒度,对性能会带来很大的影响。即使只需要查询一条记录,也需要对整个数据库进行解密。这样,访问的速度不可避免的要降低。

(2)表级加密

加密的对象是数据库中的基本元素表。关系型数据库包含多个表,并不是所有的表都有很高的安全需要,因而只需要对其中一些包含敏感信息的表进行加密。与数据库级加密相比,采用表级加密粒度,系统的查询性能会有所改善,因为对于未加密表的查询,系统性能不会受到影响,对于加密表的查询,只需要解密对应的加密表,而不要解密整个数据库。但是,这种方法与DBMS集成时,需要对DBMS内部一些核心模块进行修改,这些工作是很困难完成的。

(3)记录级加密

加密的对象是数据表中的记录,即对整条记录一起进行加密处理。在实现记录级加密时,通过调用专门的加密函数,对记录进行加密。与数据库和表级加密相比,这种加密的粒度更细,可选择的灵活性更好。但是,它和表级加密一样,这种方法也需要对DBMS内核进行修改。

(4)字段级加密

加密的对象是关系中的某个字段,即表中的列。一张表包含多个字段,在某些时候,并不是所有的字段都需要加密。因为在实际生活中,一些重要和敏感的信息往往出现在关系中的某些列,只需要对这些重要数据进行加密保护,而不用对所有字段。在实现字段级加密时,可以采取多种方式,既可以在DBMS外部完成,也可以在DBMS内部完成。

(5)数据项级加密

加密的对象是记录中的某个字段值,它是数据库加密的最小粒度。数据项级加密的方法更为灵活,它的实现方式与字段级加密相似,但其密钥管理将会更加复杂。

小知识之关系型数据库:

关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。