密码等办法对数据库的增加、删除这些数据访问加以控制,防止不合法用户读写数据。但由于DBF文件采用的是ASCII明文存储,如果非法用户不使用程序读取数据,而是直接使用WINHEX、UltreaEdit等工具--甚至是DOS下的DEBUG来打开数据库文件,都可以直接阅读到数据库中的内容。因此,为了使得DBF文件可以更加安全,必须对数据的载体DBF 文件进行加密保护,主要的目的还是把ASCII码的信息变成不可直接阅读的数据。在文件型数据库中,记录的长度一般比较短,数据存储的时间长,相应的密钥保存时间也随数据生命周期而定。如果在库内使用同一密钥,则保密性差;如果不同记录使用不同的密钥,则密钥太多,管理相当复杂。因此,应该针对数据库的特点,研究相应的加密方法和密钥管理方法。
根据文件型数据库的特点,数据库的加密一般可以有三种方式:
库外加密
考虑到文件型数据库系统是基于文件系统的,因而库外加密的办法,应该针对文件IO操作或操作系统而言的,因为数据库管理系统与操作系统的接口方式有三种:一是直接利用文件系统的功能;二是利用操作系统的I/O模块;三是直接调用存储管理。所以在采用库外加密的方法时,可以将数据先在内存中使用DES、RSA等方法进行加密,然后文件系统把每次加密后的内存数据写入到数据库文件中去(注意是把整个数据库普通的文件看待,而不是按数据关系写入),读入时再逆方面进行解密就可以正常使用了。这种加密方法相对简单,只要妥善管理密钥就可以了。缺点对数据库的读写都比较麻烦,每次都要进行加解密的工作,对程序的编写和读写数据库的速度都会有影响。
库内加密
如果从关系型数据库的各个方面出发,很容易形成库内加密的思想。关系型数据库的关键术语有:表、字段、行和数据元素。基本上可以针对这几方面形成一种加密的方法。
(1)以表为单位:对于文件型数据库来说,一个文件只有一张表,因而对表的加密可以说是对文件的加密了。对过更改文件分配表(FAT)中的说明等手段可以实现对文件的简单加密,但这种加密方式涉及到文件系统底层,误操作容易造成FAT混乱,而且与文件系统格式有关,因而通常不宜采用。
(2)以记录或字段(即二维表的行或列)为单位加密:通常情况下,我们访问数据库时都是以二维表方式进行的,二维表的每一行就是数据库的一条记录,二维表的每一列就是数据库的一个字段。如果以记录为单位进行加密,那么每读写一条记录只需进行一次加解密的操作,对于不需要访问到的记录,完全不需要进行任何操作,所以使用起来效率会高一些。但是由于每一个记录都必须有一个密钥与之匹配,因此产生和管理记录密钥比较复杂。以字段为单位的加密分析与以记录为单位的加密情况相似。 (3)以数据元素为单位加密:由于数据元素是数据库库内加密的最小单位,因而这种加密方式最彻底的但也是效率最低的。每个被加密的元素会有一个相应的密钥,所以密钥的产生和管理比记录加密方式还要复杂。
硬件加密
硬件加密主要是相对于软件加密的,是指在物理存储器与数据库系统之间加上一层硬件作为中间层,加密和解密的工作都由添加的硬件完成。不过由于添加的硬件与原计算机硬件之间可能存在着兼容问题,还有在进行控制读写的时候存在着繁琐的设置,所以这种应用起来也不会太广泛。