6.1.2 安全性控制的一般方法
数据库的安全控制机制是用于实现数据库的各种安全策略的功能集合,正是由这些安全控制机制来实现安全模型,进而实现保护数据库系统安全的目标。本书只讨论与数据库有关的用户标识和鉴别、存取控制、加密存储、数据库审计等安全技术。
1)用户标识与鉴别
用户标识是指用户向系统出示自己的身份证明,最简单的方法是输入用户ID和密码。标识机制用于唯一标识进入系统的每个用户的身份,因此必须保证标识的唯一性。鉴别是指系统检查验证用户的身份证明,用于检验用户身份的合法性。标识和鉴别功能保证了只有合法的用户才能存取系统中的资源。由于数据库用户的安全等级是不同的,因此分配给他们的权限也是不一样的,数据库系统必须建立严格的用户认证机制。身份的标识和鉴别是DBMS对访问者授权的前提,并且通过审计机制使DBMS保留追究用户行为责任的能力。功能完善的标识与鉴别机制也是访问控制机制有效实施的基础,特别是在一个开放的多用户系统的网络环境中,识别与鉴别用户是构筑DBMS安全防线的第一个重要环节。目前,常用的方法有通行字认证、数字证书认证、智能卡认证和个人特征识别认证等,下面依次介绍。
(1)通行字认证
通行字也称为“口令”或“密码”,它是一种根据已知事物验证身份的方法,也是一种最广泛研究和使用的身份验证法。在数据库系统中往往对通行字采取一些控制措施,常见的有最小长度限制、次数限定、选择字符、有效期、双通行字和封锁用户系统等。
(2)数字证书认证
数字证书是认证中心颁发并进行数字签名的数字凭证,它实现实体身份的鉴别与认证、信息完整性验证、机密性和不可否认性等安全服务。数字证书可用来证明实体所宣称的身份与其持有的公钥的匹配关系,使得实体的身份与证书中的公钥相互绑定。
(3)智能卡认证
智能卡(有源卡、IC卡或Smart卡)作为个人所有物,可以用来验证个人身份,典型智能卡主要由微处理器、存储器、输入输出接口、安全逻辑及运算处理器等组成。在智能卡中引入了认证的概念,认证是智能卡和应用终端之间通过相应的认证过程来相互确认合法性。在卡和接口设备之间只有相互认证之后才能进行数据的读写操作,目的在于防止伪造应用终端及相应的智能卡。
(4)个人特征识别认证
根据被授权用户的个人生物特征来进行确证是一种可信度更高的验证方法,个人特征识别应用了生物统计学(Biometrics)的研究成果,即利用个人具有唯一性的生理特征来实现。个人特征都具有因人而异和随身携带的特点,不会丢失并且难以伪造,非常适合于个人身份认证。目前已得到应用的个人生理特征包括指纹、语音声纹、DNA、视网膜、虹膜、脸型和手型等。一些学者已开始研究基于用户个人行为方式的身份识别技术,如用户写签名和敲击键盘的方式等。个人特征一般需要应用多媒体数据存储技术来建立档案,相应地需要基于多媒体数据的压缩、存储和检索等技术作为支撑。目前已有不少基于个人特征识别的身份认证系统成功地投入应用。如美国联邦调查局(FBI)成功地将小波理论应用于压缩和识别指纹图样,可以将一个10 MB的指纹图样压缩成500 KB,从而大大减少了数百万指纹档案的存储空间和检索时间。
2)存取控制
存取控制的目的是确保用户对数据库只能进行经过授权的相关操作。在存取控制机制中,一般把被访问的资源称为“客体”,把以用户名义进行资源访问的进程、事务等实体称为“主体”。传统的存取控制机制有两种,即自主存取控制(Discretionary Access Control,DAC)和强制存取控制(Mandatory Access Control,MAC)。
(1)自主存取控制
在DAC机制中,用户对不同的数据对象有不同的存取权限,而且还可以将其拥有的存取权限转授给其他用户。DAC访问控制完全基于访问者和对象的身份。
大型数据库管理系统几乎都支持自主存取控制DAC,目前的SQL标准也通过GRANT(授权)语句和REVOKE(收回权限)语句对自主存取控制提供支持。
在非关系系统中,用户只能对数据进行操作,存取控制的数据对象也仅限于数据本身。而关系数据库系统中,DBA可以把建立、修改基本表的权限授予用户,用户获得此权限之后可以建立和修改基本表、索引、视图。因此,关系系统中存取控制的数据对象不仅有数据本身,如表、属性列等,还有模式、外模式、内模式等数据字典中的内容。关系系统中的自主存取控制(DAC)权限见表6-1。
表6-1 关系系统中的自主存取控制(DAC)权限
在DAC中,数据对象的创建者自动获得对该数据对象的所有操作权限,这些权限可以通过GRANT语句转授给其他用户。当用户将某些权限授给其他用户后,也可以使用REVOKE语句将权限收回。
(2)强制存取控制
在MAC机制中,每一个数据对象被标以一定的密级(例如绝密、机密、可信、公开等),每一个用户也被授予某一个级别的许可。对不同类型的数据来进行访问授权。在MAC机制中,存取权限不可以转授,所有用户必须遵守由数据库管理员建立的安全规则,其中最基本的规则为“向下读取,向上写入”。显然,与DAC相比,MAC机制更加严格。强制存取控制策略多用于那些对数据有严格而固定的密级分类的部门,如军事部门或者政府部门。
3)数据库加密
由于数据库在操作系统中以文件形式管理,所以入侵者可以直接利用操作系统的漏洞窃取数据库文件,或者篡改数据库文件内容。另一方面,数据库管理员(DBA)可以任意访问所有数据,往往超出了其职责范围,同样造成安全隐患。因此,数据库的保密问题不仅包括在传输过程中采用加密保护和控制非法访问,还包括对存储的敏感数据进行加密保护,使得即使数据不幸泄露或者丢失,也难以造成泄密。同时,数据库加密可以由用户用自己的密钥加密自己的敏感信息,而不需要了解数据内容的数据库管理员无法进行正常解密,从而可以实现个性化的用户隐私保护。对数据库加密必然会带来数据存储与索引、密钥分配和管理等一系列问题,同时加密也会显著地降低数据库的访问与运行效率。
因此,保密性与可用性之间不可避免地存在冲突,需要妥善解决二者之间的矛盾。数据库中存储密文数据后,如何进行高效查询成为一个重要的问题。查询语句一般不可以直接运用到密文数据库的查询过程中,一般的方法是首先解密加密数据,然后查询解密数据。但由于要对整个数据库或数据表进行解密操作,因此开销巨大。在实际操作中需要通过有效的查询策略来直接执行密文查询或较小粒度的快速解密。一般来说,一个好的数据库加密系统应该满足以下几个方面的要求:
足够的加密强度,保证长时间且大量数据不被破译。
加密后的数据库存储量没有明显增加。
加解密速度足够快,影响数据操作响应时间尽量短。
加解密对数据库的合法用户操作(如数据的增删改等)是透明的。
灵活的密钥管理机制,加解密密钥存储安全,使用方便可靠。
(1)加密粒度
一般来说,数据库加密的粒度有4种,即表、属性、记录和数据元素。不同加密粒度的特点不同,总的来说,加密粒度越小,则灵活性越好且安全性越高,但实现技术也更为复杂,对系统的运行效率影响也越大。
表级加密的对象是整个表,这种加密方法类似于操作系统中文件加密的方法。即每个表与不同的表密钥运算,形成密文后存储。这种方式最为简单,但因为对表中任何记录或数据项的访问都需要将其所在表的所有数据快速解密,因而执行效率很低,浪费了大量的系统资源。在目前的实际应用中,这种方法基本已被放弃。
属性加密又称为“域加密”或“字段加密”,即以表中的列为单位进行加密。一般而言,属性的个数少于记录的条数,需要的密钥数相对较少。如果只有少数属性需要加密,属性加密是可选的方法。
记录加密是把表中的一条记录作为加密的单位,当数据库中需要加密的记录数比较少时,采用这种方法是比较好的。
数据元素加密是以记录中每个字段的值为单位进行加密,数据元素是数据库中最小的加密粒度。采用这种加密粒度,系统的安全性与灵活性最高,同时实现技术也最为复杂。不同的数据项使用不同的密钥,相同的明文形成不同的密文,抗攻击能力得到提高。不利的方面是,该方法需要引入大量的密钥。一般要周密设计自动生成密钥的算法,密钥管理的复杂度大大增加,同时系统效率也受到影响。在目前条件下,为了得到较高的安全性和灵活性,采用最多的加密粒度是数据元素。为了使数据库中的数据能够充分而灵活地共享,加密后还应当允许用户以不同的粒度进行访问。
(2)常用的加密算法
加密算法是数据加密的核心,一个好的加密算法产生的密文应该频率平衡,随机无重码,周期很长而又不可能产生重复现象。窃密者很难通过对密文频率,或者重码等特征的分析获得成功。同时,算法必须适应数据库系统的特性,加/解密,尤其是解密响应迅速。
常用的加密算法包括对称密钥算法和非对称密钥算法。
对称密钥算法的特点是解密密钥和加密密钥相同,或解密密钥由加密密钥推出。这种算法一般又可分为两类,即序列算法和分组算法。序列算法一次只对明文中的单个位或字节运算;分组算法是对明文分组后以组为单位进行运算,常用有DES等。
非对称密钥算法也称为“公开密钥算法”,其特点是解密密钥不同于加密密钥,并且从解密密钥推出加密密钥在计算上是不可行的。其中加密密钥公开,解密密钥则是由用户秘密保管的私有密钥。常用的公开密钥算法有RSA等。
目前还没有公认的专门针对数据库加密的加密算法,因此一般根据数据库特点选择现有的加密算法来进行数据库加密。一方面,对称密钥算法的运算速度比非对称密钥算法快很多,二者相差2~3个数量级;另一方面,在公开密钥算法中,每个用户有自己的密钥对。而作为数据库加密的密钥如果因人而异,将产生异常庞大的数据存储量。因此,在数据库加密中一般采取对称密钥的分组加密算法。
对数据库进行加密,一般对不同的加密单元采用不同的密钥。以加密粒度为数据元素为例,如果不同的数据元素采用同一个密钥,由于同一属性中数据项的取值在一定范围之内,且往往呈现一定的概率分布,因此攻击者可以不用求原文,而直接通过统计方法即可得到有关的原文信息,这就是所谓的统计攻击。
大量的密钥自然会带来密钥管理的问题。根据加密粒度的不同,系统所产生的密钥数量也不同。越是细小的加密粒度,所产生的密钥数量越多,密钥管理也就越复杂。良好的密钥管理机制既可以保证数据库信息的安全性,又可以进行快速的密钥交换,以便进行数据解密。
对数据库密钥的管理一般有集中密钥管理和多级密钥管理两种体制,集中密钥管理方法是设立密钥管理中心。在建立数据库时,密钥管理中心负责产生密钥并对数据加密,形成一张密钥表。当用户访问数据库时,密钥管理机构核对用户识别符和用户密钥。通过审核后,由密钥管理机构找到或计算出相应的数据密钥。这种密钥管理方式方便用户使用和管理,但由于这些密钥一般由数据库管理人员控制,因而权限过于集中。
目前研究和应用比较多的是多级密钥管理体制,以加密粒度为数据元素的三级密钥管理体制为例,整个系统的密钥由一个主密钥、每个表上的表密钥,以及各个数据元素密钥组成。表密钥被主密钥加密后以密文形式保存在数据字典中,数据元素密钥由主密钥及数据元素所在行、列通过某种函数自动生成,一般不需要保存。在多级密钥体制中,主密钥是加密子系统的关键,系统的安全性在很大程度上依赖于主密钥的安全性。
数据库加密技术在保证安全性的同时,也给数据库系统的可用性带来一些影响。
系统运行效率受到影响:数据库加密技术带来的主要问题之一是影响效率。为了减少这种影响,一般对加密的范围做一些约束,如不加密索引字段和关系运算的比较字段等。
难以实现对数据完整性约束的定义:数据库一般都定义了关系数据之间的完整性约束,如主/外键约束及值域的定义等。数据一旦加密,DBMS将难以实现这些约束。
对数据的SQL语言及SQL函数受到制约:SQL语言中的Group by、Order by及Having子句分别完成分组和排序等操作,如果这些子句的操作对象是加密数据,那么解密后的明文数据将失去原语句的分组和排序作用。另外,DBMS扩展的SQL内部函数一般也不能直接作用于密文数据。
密文数据容易成为攻击目标:加密技术把有意义的明文转换为看上去没有实际意义的密文信息,但密文的随机性同时也暴露了消息的重要性,容易引起攻击者的注意和破坏,从而造成了一种新的不安全性。加密技术往往需要和其他非加密安全机制相结合,以提高数据库系统的整体安全性。
总之,数据库加密作为一种对敏感数据进行安全保护的有效手段,将得到越来越多的重视。目前数据库加密技术还面临许多挑战,其中解决保密性与可用性之间的矛盾是关键。
4)数据库审计
数据库审计是指监视和记录用户对数据库所施加的各种操作的机制,把用户对数据库的所有操作自动记录下来,存放于审计日志中,DBA可以利用审计跟踪的信息重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
审计机制应该至少记录用户标识和认证、客体访问、授权用户进行并会影响系统安全的操作,以及其他安全相关事件。对于每个记录的事件,审计记录中需要包括事件时间、用户、时间类型、事件数据和事件的成功/失败情况。对于标识和认证事件,必须记录事件源的终端ID和源地址等;对于访问和删除对象的事件,则需要记录对象的名称。
一般地,将审计跟踪和数据库日志记录结合起来,会达到更好的安全审计效果。对于审计粒度与审计对象的选择,需要考虑系统运行效率与存储空间消耗的问题。为了达到审计目的,一般必须审计到对数据库记录与字段一级的访问。但这种小粒度的审计需要消耗大量的存储空间,同时使系统的响应速度降低,给系统运行效率带来影响。