随着计算机科学技术的发展与普及,
特别是计算机在国民经济各重要部门的普遍应用
计算机安全已经是当前信息社会很是关注的突出问题
而数据库系统
担负着存储和管理上述数据信息的任务。于是
如何保证和增强其安全性和保密性
已成为目前迫切须要解决的热门课题。
1、 数据库安全与保密概述
数据库系统
通常能够理解成两部分一部分是数据库
按必定的方式存取数据另外一部分是数据库管理系统(DBMS)
为用户及应用程序提供数据访问
并具备对数据库进行管理、维护等多种功能。
数据库系统安全
包含两层含义
第一层是指系统运行安全
它包括
法律、政策的保护
如用户是否有合法权利
政策是否容许等
物理控制安全
如机房加锁等
硬件运行安全
操做系统安全
如数据文件是否保护等
灾害、故障恢复
死锁的避免和解除
电磁信息泄漏防止。html
第二层是指系统信息安全
它包括
用户口令字鉴别
用户存取权限控制
数据存取权限、方式控制
审计跟踪
数据加密。算法
2、 数据库基本安全架构
数据库系统信息安全性依赖于两个层次一层是数据库管理系统自己提供的用户名/口令字识别、视图、使用权限控制、审计等管理措施
大型数据库管理系统Oracle、Sybase、Ingress等均有此功能另外一层就是靠应用程序设置的控制管理
如使用较广泛的Foxbase、Forpro等。做为数据库用户
最关心自身数据资料的安全
特别是用户的查询权限问题。对此
目前一些大型数据库管理系统(如Oracle、Sybase等产品)提供了如下几种主要手段。
⒈ 用户分类
不一样类型的用户授予不一样的数据管理权限。通常将权限分为三类数据库登陆权限类、资源管理权限类和数据库管理员权限类。
有了数据库登陆权限的用户才能进入数据库管理系统
才能使用数据库管理系统所提供的各种工具和实用程序。同时
数据库客体的主人能够授予这类用户以数据查询、创建视图等权限。这类用户只能查阅部分数据库信息
不能改动数据库中的任何数据。
具备资源管理权限的用户
除了拥有上一类的用户权限外
还有建立数据库表、索引等数据库客体的权限
能够在权限容许的范围内修改、查询数据库
还能将本身拥有的权限授予其余用户
能够申请审计。
具备数据库管理员权限的用户将具备数据库管理的一切权限
包括访问任何用户的任何数据
授予(或回收)用户的各类权限
建立各类数据库客体
完成数据库的整库备份、装入重组以及进行全系统的审计等工做。这类用户的工做是谨慎而带全局性的工做
只有极少数用户属于这种类型。
⒉ 数据分类
同一类权限的用户
对数据库中数据管理和使用的范围又多是不一样的。为此
DBMS提供了将数据分类的功能
即创建视图。管理员把某用户可查询的数据逻辑上归并起来
简称一个或多个视图
并赋予名称
在把该视图的查询权限授予该用户(也能够授予多个用户)。这种数据分类能够进行得很细
其最小粒度是数据库二维表中一个交叉的元素。
⒊ 审计功能
大型DBMS提供的审计功能是一个十分重要的安全措施
它用来监视各用户对数据库施加的动做。有两种方式的审计
即用户审计和系统审计。用户审计时
DBMS的审计系统记下全部对本身表或视图进行访问的企图(包括成功的和不成功的)及每次操做的用户名、时间、操做代码等信息。这些信息通常都被记录在数据字典(系统表)之中
利用这些信息用户能够进行审计分析。系统审计由系统管理员进行
其审计内容主要是系统一级命令以及数据库客体的使用状况。
3、 数据库加密
通常而言
数据库系统提供的上述基本安全技术可以知足通常的数据库应用
但对于一些重要部门或敏感领域的应用
仅靠上述这些措施是难以彻底保证数据的安全性
某些用户尤为是一些内部用户仍可能非法获取用户名、口令字
或利用其余方法越权使用数据库
甚至能够直接打开数据库文件来窃取或篡改信息。所以
有必要对数据库中存储的重要数据进行加密处理
以实现数据存储的安全保护。
⒈ 数据库密码系统的基本流程
数据加密
就是将明文数据通过必定的交换(通常为变序和代昀)变成密文数据。
数据脱密是加密的逆过程
即将密文数据转变成可见的明文数据。
一个密码系统包含明文集合、密文集合、密钥集合和算法
其中密钥和算法构成了密码系统的基本单元。算法是一些公式、法则或程序
规定明文与密文之间的变换方法
密钥能够看做算法中的参数。
数据库密码系统要求将明文数据加密成密文数据
数据库中存储密文数据
查询时将密文数据取出脱密获得明文信息。
⒉ 数据库加密的特色
较之传统的数据加密技术
数据库密码系统有其自身的要求和特色。传统的加密以报文为单位
加脱密都是从头到尾顺序进行。数据库数据的使用方法决定了它不可能以整个数据库文件为单位进行加密。当符合检索条件的记录被检索出来后
就必须对该记录迅速脱密。然而该记录是数据库文件中随机的一段
没法从中间开始脱密
除非从头至尾进行一次脱密
而后再去查找相应的这个记录
显然这是不合适的。必须解决随机地从数据库文件中某一段数据开始脱密的问题。
⑴ 数据库密码系统应采用公开密钥
传统的密码系统中
密钥是秘密的
知道的人越少越好。一旦获取了密钥和密码体制就能攻破密码
解开密文。而数据库数据是共享的
有权限的用户随时须要知道密钥来查询数据。所以
数据库密码系统宜采用公开密钥的加密方法。设想数据库密码系统的加密算法是保密的
并且具备至关的强度
那么利用密钥
采用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层考虑这一问题
那么数据库加密将会出现新的格局。数据库