随着计算机科学技术的发展与普及,
特别是计算机在国民经济各重要部门的广泛应用
计算机安全已是当前信息社会非常关注的突出问题
而数据库系统
担负着存储和管理上述数据信息的任务。因而
如何保证和加强其安全性和保密性
已成为目前迫切需要解决的热门课题。
一、 数据库安全与保密概述
数据库系统
一般可以理解成两部分一部分是数据库
按一定的方式存取数据另一部分是数据库管理系统(DBMS)
为用户及应用程序提供数据访问
并具有对数据库进行管理、维护等多种功能。
数据库系统安全
包含两层含义
第一层是指系统运行安全
它包括
法律、政策的保护
如用户是否有合法权利
政策是否允许等
物理控制安全
如机房加锁等
硬件运行安全
操作系统安全
如数据文件是否保护等
灾害、故障恢复
死锁的避免和解除
电磁信息泄漏防止。
第二层是指系统信息安全
它包括
用户口令字鉴别
用户存取权限控制
数据存取权限、方式控制
审计跟踪
数据加密。
二、 数据库基本安全架构
数据库系统信息安全性依赖于两个层次一层是数据库管理系统本身提供的用户名/口令字识别、视图、使用权限控制、审计等管理措施
大型数据库管理系统Oracle、Sybase、Ingress等均有此功能另一层就是靠应用程序设置的控制管理
如使用较普遍的Foxbase、Forpro等。作为数据库用户
最关心自身数据资料的安全
特别是用户的查询权限问题。对此
目前一些大型数据库管理系统(如Oracle、Sybase等产品)提供了以下几种主要手段。
⒈ 用户分类
不同类型的用户授予不同的数据管理权限。一般将权限分为三类数据库登录权限类、资源管理权限类和数据库管理员权限类。
有了数据库登录权限的用户才能进入数据库管理系统
才能使用数据库管理系统所提供的各类工具和实用程序。同时
数据库客体的主人可以授予这类用户以数据查询、建立视图等权限。这类用户只能查阅部分数据库信息
不能改动数据库中的任何数据。
具有资源管理权限的用户
除了拥有上一类的用户权限外
还有创建数据库表、索引等数据库客体的权限
可以在权限允许的范围内修改、查询数据库
还能将自己拥有的权限授予其他用户
可以申请审计。
具有数据库管理员权限的用户将具有数据库管理的一切权限
包括访问任何用户的任何数据
授予(或回收)用户的各种权限
创建各种数据库客体
完成数据库的整库备份、装入重组以及进行全系统的审计等工作。这类用户的工作是谨慎而带全局性的工作
只有极少数用户属于这种类型。
⒉ 数据分类
同一类权限的用户
对数据库中数据管理和使用的范围又可能是不同的。为此
DBMS提供了将数据分类的功能
即建立视图。管理员把某用户可查询的数据逻辑上归并起来
简称一个或多个视图
并赋予名称
在把该视图的查询权限授予该用户(也可以授予多个用户)。这种数据分类可以进行得很细
其最小粒度是数据库二维表中一个交叉的元素。
⒊ 审计功能
大型DBMS提供的审计功能是一个十分重要的安全措施
它用来监视各用户对数据库施加的动作。有两种方式的审计
即用户审计和系统审计。用户审计时
DBMS的审计系统记下所有对自己表或视图进行访问的企图(包括成功的和不成功的)及每次操作的用户名、时间、操作代码等信息。这些信息一般都被记录在数据字典(系统表)之中
利用这些信息用户可以进行审计分析。系统审计由系统管理员进行
其审计内容主要是系统一级命令以及数据库客体的使用情况。
三、 数据库加密
一般而言
数据库系统提供的上述基本安全技术能够满足一般的数据库应用
但对于一些重要部门或敏感领域的应用
仅靠上述这些措施是难以完全保证数据的安全性
某些用户尤其是一些内部用户仍可能非法获取用户名、口令字
或利用其他方法越权使用数据库
甚至可以直接打开数据库文件来窃取或篡改信息。因此
有必要对数据库中存储的重要数据进行加密处理
以实现数据存储的安全保护。
⒈ 数据库密码系统的基本流程
数据加密
就是将明文数据经过一定的交换(一般为变序和代昀)变成密文数据。
数据脱密是加密的逆过程
即将密文数据转变成可见的明文数据。
一个密码系统包含明文集合、密文集合、密钥集合和算法
其中密钥和算法构成了密码系统的基本单元。算法是一些公式、法则或程序
规定明文与密文之间的变换方法
密钥可以看作算法中的参数。
数据库密码系统要求将明文数据加密成密文数据
数据库中存储密文数据
查询时将密文数据取出脱密得到明文信息。
⒉ 数据库加密的特点
较之传统的数据加密技术
数据库密码系统有其自身的要求和特点。传统的加密以报文为单位
加脱密都是从头至尾顺序进行。数据库数据的使用方法决定了它不可能以整个数据库文件为单位进行加密。当符合检索条件的记录被检索出来后
就必须对该记录迅速脱密。然而该记录是数据库文件中随机的一段
无法从中间开始脱密
除非从头到尾进行一次脱密
然后再去查找相应的这个记录
显然这是不合适的。必须解决随机地从数据库文件中某一段数据开始脱密的问题。
⑴ 数据库密码系统应采用公开密钥
传统的密码系统中
密钥是秘密的
知道的人越少越好。一旦获取了密钥和密码体制就能攻破密码
解开密文。而数据库数据是共享的
有权限的用户随时需要知道密钥来查询数据。因此
数据库密码系统宜采用公开密钥的加密方法。设想数据库密码系统的加密算法是保密的
而且具有相当的强度
那么利用密钥
采用OS和DBMS层的工具
也无法得到数据明文。
⑵ 多级密钥结构
数据库关系运算中参与运算的最小单位是字段
查询路径依次是库名、表名、记录名和字段名。因此
字段是最小的加密单位。也就是说当查得一个数据后
该数据所在的库名、表名、记录名、字段名都应是知道的。对应的库名、表名、记录名、字段名都应该具有自己的子密钥
这些子密钥组成了一个能够随时加/脱密的公开密钥。
可以设计一个数据库
其中存放有关数据库名、表名、字段名的子密钥
系统启动后将这些子密钥读入内存供数据库用户使用。与记录相对应的子密钥
一般的方法应是在该记录中增加一条子密钥数据字段。
⑶ 加密机制
有些公开密钥体制的密码
如RSA密码
其加密密钥是公开的
算法也是公开的
但是其算法是个人一套
而作为数据库密码的加密算法不可能因人而异
因为寻找这种算法有其自身的困难和局限性
机器中也不可能存放很多种算法
因此这类典型的公开密钥的加密体制也不适合于数据库加密。数据库加/脱密密钥应该是相同、公开的
而加密算法应该是绝对保密的。
数据库公开密钥加密机制应是一个二元函数
密文=F(密钥
明文)
当加密算法F确定之后
只要给出密钥和待加密的明文
即可得到相应的密文。脱密过程即是加密过程的逆过程
明文=F-1(密钥
密文)
由此可知
数据库密码的加密机制应是既可加密又可脱密的可逆过程。
⑷ 加密算法
加密算法是数据加密的核心
一个好的加密算法产生的密文应该频率平衡
随机无重码规律
周期很长而又不可能产生重复现象。窃密者很难通过对密文频率、重码等特征的分析获得成功。同时
算法必须适应数据库系统的特性
加/脱密响应迅速。
著名的MH背包算法就是一种适合数据库加密的算法。它的基本思想是有一个函数F
使X=F(K,Y)
在这里X相当于公开密钥向量
Y相当于明文。在算法F不公开的情况下
若已知K和X
要还原出Y来
穷尽次数为2n次。如果向量的分量n较大时
用穷尽的方法来还原将是十分困难的。
⒊ 数据库加密的范围
数据加密通过对明文进行复杂的加密操作
以达到无法发现明文和密文之间、密文和密钥之间的内在关系
也就是说经过加密的数据经得起来自OS和DBMS的攻击。另一方面
DBMS要完成对数据库文件的管理和使用
必须具有能够识别部分数据的条件。据此
只能对数据库中数据进行部分加密。
⑴ 索引字段不能加密
为了达到迅速查询的目的
数据库文件需要建立一些索引。不论是字典式的单词索引、B树索引或HASH函数索引等
它们的建立和应用必须是明文状态
否则将失去索引的作用。有的DBMS中可以建立簌聚索引
这类索引也需要在明文状态下建立和维护使用。
⑵ 关系运算的比较字段不能加密
DBMS要组织和完成关系运算
参加并、差、积、商、投影、选择和连接等操作的数据一般都要经过条件筛选
这种"条件"选择项必须是明文
否则DBMS将无法进行比较筛选。例如
要求检索工资在1000元以上的职工人员名单
"工资"字段中的数据若加密
SQL语句就无法辨认比较。
⑶ 表间的连接码字段不能加密
数据模型规范化以后
数据库表之间存在着密切的联系
这种相关性往往是通过"外部编码"联系的
这些编码若加密就无法进行表与表之间的连接运算。
⒋ 数据库加密对数据库管理系统原有功能的影响
目前DBMS的功能比较完备
特别象Oracle、Sybase这些采用Client/Server结构的数据库管理系统
具有数据库管理和应用开发等工具。然而
数据库数据加密以后
DBMS的一些功能将无法使用。
⑴ 无法实现对数据制约因素的定义
Sybase数据库系统的规则定义了数据之间的制约因素。数据一旦加密
DBMS将无法实现这一功能
而且
值域的定义也无法进行。
值得注意的是
数据库中的每个字段的类型、长度都有具体的限定。数据加密时
数值类型的数据只能在数值范围内加密
日期和字符类型的数据也都只能在各自的类型范围内加密
密文长度也不能超过字段限定的长度
否则DBMS将无法接受这些加密过的数据。
⑵ 密文数据的排序、分组和分类
Select语句中的Group by、Order by、Having子句分别完成分组、排序、分类等操作。这些子句的操作对象如果是加密数据
那么脱密后的明文数据将失去原语句的分组、排序、分类作用
显然这不是用户所需要的。
⑶ SQL语言中的内部函数将对加密数据失去作用
DBMS对各种类型数据均提供了一些内部函数
这些函数不能直接作用于加密数据。
⑷ DBMS的一些应用开发工具的使用受到限制
DBMS的一些应用开发工具不能直接对加密数据进行操作
因而它们的使用会受到限制。
在数据库安全和加密技术的研究方面
我们只是作了一些尝试性的工作
许多细节有待于进一步深入。通过研究
我们认识到数据库安全与保密这一领域研究的重要性和迫切性。目前的DBMS对数据库的加密问题基本都没有经过仔细考虑
如果在DBMS层考虑这一问题
那么数据库加密将会出现新的格局。