掌桥专利:专业的专利平台
掌桥专利
首页

基于国产数据库的透明加密方法及系统

文献发布时间:2024-04-18 19:58:21


基于国产数据库的透明加密方法及系统

技术领域

本发明涉及数据库技术领域,具体地说是基于国产数据库的透明加密方法及系统。

背景技术

数据库系统是计算机信息系统的核心部件,存储着系统中最有价值的数据,其安全性至关重要。由于数据库存储的原始数据在操作系统中以可读文件的形式进行管理,容易被操作系统的用户窃取或篡改,同时由于数据库管理员通常有权访问所有数据,存在超出职责范围访问用户敏感数据的安全隐患,因此,越来越多的基于数据库的信息系统希望对存放在数据库中的敏感数据进行加密以保障其安全性。

目前,数据泄露事件频频发生,各行各领域都不能幸免。明文数据在数据库中的存储是不安全的,攻击者能通过社会工程和技术入侵等手段来进行数据窃取。数据库的安全日益重要,对数据库中的敏感字段进行加密是有效的安全手段。

但是由于种种原因,国内目前普遍使用的各种数据库对加密的支持力度均难以满足安全要求,特别是加密解密运算与密钥管理会显著降低数据库访问与运行的效率,因此高效的数据库加密技术成为迫切需要解决问题。

当对数据库进行加密之后,数据之间原有的偏序关系将会丧失,因而无法通过原来的索引机制来加快对密文数据的条件查询。如果数据库不能对加密存储的数据提供高效的查询手段,必然会降低数据库的可用性。为了解决这一问题,现在通常采用动态加密和密文索引的方法。该方法是密文和明文保持相同的偏序关系,从而实现条件查询。但这种加密方法强度较弱,容易被破解,而且由于索引文件不是数据库的一部分,数据库管理系统无法对其实现事务管理,难以保证数据库与索引文件之间的一致性。

对于此问题,曾有研究采用B+树等数据结构实现密文索引以支持动态结构调整和顺序查找。该些方法由于维护索引数据等问题,难以具有良好性能。

国产商业数据库系统的加密保护文件不支持字段加密,是需要解决的技术问题。

发明内容

本发明的技术任务是针对以上不足,提供基于国产数据库的透明加密方法及系统,来解决国产商业数据库系统的加密保护文件不支持字段加密的技术问题。

第一方面,本发明一种基于国产数据库的透明加密方法,包括如下步骤:

S100、对原始表改名,并在原始表中添加RAW字段,RAW字段用于存储密文中的字段;

S200、禁用约束:对于原始表,删除建立在敏感字段上的约束,基于主键和外键约束的字段不能被选取作为加密字段,对于敏感字段上的唯一性约束,非空约束和值约束均被禁用;

S300、删除索引:对于原始表中敏感字段,如果敏感字段本身有索引,将索引删除;

S400、加密敏感数据:如果原始表中记录有敏感字段,调用加密算法对敏感数据进行加密,并将密文保存至RAW字段中,并清空原始敏感字段中数据内容;

如果敏感字段需要实现密文索引,建立密文索引,密文索引以表的形式存储于数据库中,并执行步骤S500,如果敏感字段不需要实现密文索引,则直接执行步骤S500;

S500、创建函数:创建权限函数,权限函数用于控制授权用户可以查看加密列的明文数据,非授权用户只能查看加密列的密文数据;

S600、创建视图:创建一个与原始表同名的视图,视图中选取原始表的所有字段,其中,敏感字段用解密函数代替,并且要根据权限函数进行解密;

S700、创建触发器和存储过程:在视图上建立触发器,在触发器中,调用加密算法将敏感数据加密,并将密文保存在RAW字段中,如果原始表中有约束,实现约束;

S800、实现扩展索引接口:对于修改后的原始表,表中的数据分为敏感数据和非敏感数据,敏感数据以密文的形式存放在表中,而非敏感数据则以明文的形式存放,视图名与原始表名相同,用户对原始表的操作均会作用在视图上,当用户查询数据时,视图能够自动调用解密函数将密文数据解密,并将明文数据返回用户;当用户修改数据时,用户在视图上的操作都能够由触发器完成。

作为优选,步骤S400中,实现密文索引的方法为:基于数据库的表和SQL语言,建立辅助的实现密文索引数据结构以及查询和维护算法,利用数据库系统的索引扩展机制、实现密文索引的调用和维护。

作为优选,数据库的索引扩展机制为公知的扩展机制,包括Oracle的扩展索引或者IBM的扩展索引,所述公知的扩展索引机制允许用户为特定的字段自定义索引方法;

数据库系统的索引扩展机制包括如下:

一个对原表记录的索引,用于根据ID实现快速解密得到明文;

一个根据明文实际取值的偏序保持算法,用于实现快速的范围查询;

其中,实现密文偏序关系的索引结构采用具有索引功能的数据结构,数据结构为AVL树、B+树或B-树。

作为优选,在视图上建立instead of类型的触发器,触发器用于插入、删除和修改事件。

作为优选,如果原始表中有约束,使用SQL语言实现约束。

第二方面,本发明一种基于国产数据库的透明加密系统,用于执行如第一方面任一项所述的基于国产数据库的透明加密方法,所述系统包括:

原始表改名模块,所述原始表改名模块用于对原始表改名,并在原始表中添加RAW字段,RAW字段用于存储密文中的字段;

约束配置模块,对于原始表,所述约束配置模块用于删除建立在敏感字段上的约束,基于主键和外键约束的字段不能被选取作为加密字段,对于敏感字段上的唯一性约束,非空约束和值约束均被禁用;

索引删除模块,对于原始表中敏感字段,如果敏感字段本身有索引,所述索引删除模块用于将索引删除;

数据加密模块,如果原始表中记录有敏感字段,所述数据加密模块用于调用加密算法对敏感数据进行加密,并将密文保存至RAW字段中,并清空原始敏感字段中数据内容;如果敏感字段需要实现密文索引,所述数据加密模块用于建立密文索引,密文索引以表的形式存储于数据库中;

函数创建模块,所述函数创建模块用于创建权限函数,权限函数用于控制授权用户可以查看加密列的明文数据,非授权用户只能查看加密列的密文数据;

视图创建模块,所述视图创建模块用于创建一个与原始表同名的视图,视图中选取原始表的所有字段,其中,敏感字段用解密函数代替,并且要根据权限函数进行解密;

触发器建立模块,所述触发器建立模块用于在视图上建立触发器,在触发器中,调用加密算法将敏感数据加密,并将密文保存在RAW字段中,如果原始表中有约束,实现约束;

索引接口,对于修改后的原始表,表中的数据分为敏感数据和非敏感数据,敏感数据以密文的形式存放在表中,而非敏感数据则以明文的形式存放,视图名与原始表名相同,索引接口用于执行如下:用户对原始表的操作均会作用在视图上,当用户查询数据时,视图能够自动调用解密函数将密文数据解密,并将明文数据返回用户;当用户修改数据时,用户在视图上的操作都能够由触发器完成。

作为优选,所述数据加密模块用于执行如下实现密文索引:基于数据库的表和SQL语言,建立辅助的实现密文索引数据结构以及查询和维护算法,利用数据库系统的索引扩展机制、实现密文索引的调用和维护。

作为优选,数据库的索引扩展机制为公知的扩展机制,包括Oracle的扩展索引或者IBM的扩展索引,所述公知的扩展索引机制允许用户为特定的字段自定义索引方法;

数据库系统的索引扩展机制包括如下:

一个对原表记录的索引,用于根据ID实现快速解密得到明文;

一个根据明文实际取值的偏序保持算法,用于实现快速的范围查询;

其中,实现密文偏序关系的索引结构采用具有索引功能的数据结构,数据结构为AVL树、B+树或B-树。

作为优选,所述触发器建立模块用于在视图上建立instead of类型的触发器,触发器用于插入、删除和修改事件。

作为优选,如果原始表中有约束,所述触发器建立模块用于使用SQL语言实现约束。

本发明的基于国产数据库的透明加密方法及系统具有以下优点:

1、加解密过程完全透明:基于视图和触发器实现敏感数据的自动解密和加密,加密和解密过程对于基于数据库的应用程序来说是完全透明的,这种特性可以使得应用程序在开发阶段不用考虑数据库加密的问题,在系统发布之后再进行数据库的透明加密改造而不用重新编译应用程序;

2、高效密文索引:实现高效的密文索引数据结构及算法,从而可以高效的实现对密文字段的条件查询;

3、事务支持:由于加密机制和密文索引机制都是在数据库内部通过触发器实现的,从而透明的支持事务的提交和回滚机制,并且在多个用户之间自动的实现了数据同步;

4、独立权控:可以在外置的安全服务中提供独立于数据库自有权控体系之外的权限控制体系,可以有效防止特权用户(如DBA)对敏感数据的越权访问;

5、细粒度加密:可以实现精确到列级别的细粒度加密,这一优势是由此加密技术的具体实现决定的。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

下面结合附图对本发明进一步说明。

图1为实施例1一种基于国产数据库的透明加密方法的流程框图。

具体实施方式

下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。

本发明实施例提供基于国产数据库的透明加密方法及系统,用于解决国产商业数据库系统的加密保护文件不支持字段加密的技术问题。

实施例1:

本发明一种基于国产数据库的透明加密方法,包括如下步骤:

S100、对原始表改名,并在原始表中添加RAW字段,RAW字段用于存储密文中的字段;

S200、禁用约束:对于原始表,删除建立在敏感字段上的约束,基于主键和外键约束的字段不能被选取作为加密字段,对于敏感字段上的唯一性约束,非空约束和值约束均被禁用;

S300、删除索引:对于原始表中敏感字段,如果敏感字段本身有索引,将索引删除;

S400、加密敏感数据:如果原始表中记录有敏感字段,调用加密算法对敏感数据进行加密,并将密文保存至RAW字段中,并清空原始敏感字段中数据内容;

如果敏感字段需要实现密文索引,建立密文索引,密文索引以表的形式存储于数据库中,并执行步骤S500,如果敏感字段不需要实现密文索引,则直接执行步骤S500;

S500、创建函数:创建权限函数,权限函数用于控制授权用户可以查看加密列的明文数据,非授权用户只能查看加密列的密文数据;

S600、创建视图:创建一个与原始表同名的视图,视图中选取原始表的所有字段,其中,敏感字段用解密函数代替,并且要根据权限函数进行解密;

S700、创建触发器和存储过程:在视图上建立触发器,在触发器中,调用加密算法将敏感数据加密,并将密文保存在RAW字段中,如果原始表中有约束,实现约束;

S800、实现扩展索引接口:对于修改后的原始表,表中的数据分为敏感数据和非敏感数据,敏感数据以密文的形式存放在表中,而非敏感数据则以明文的形式存放,视图名与原始表名相同,用户对原始表的操作均会作用在视图上,当用户查询数据时,视图能够自动调用解密函数将密文数据解密,并将明文数据返回用户;当用户修改数据时,用户在视图上的操作都能够由触发器完成。

本实施例步骤S100原始表改名,并在改名后的原始表上添加RAW类型密文字段。由于数据加密后,数据类型发生变化,原始字段已经不能用来存放密文,所以必须新增RAW类型的字段保存加密后的密文。

本实施例步骤S200禁用约束,由于数据加密后,原始约束条件失效,而且为了保护数据的安全,原始字段内容已被清空。因此,必须删除建立在敏感字段上的约束。拥有主键和外键约束的字段不能被选取作为加密字段,因此对于敏感字段上的唯一性约束,非空约束和值约束,均需要被禁用。

步骤S300删除索引,由于数据转换为密文后,索引将失效,因此,如果敏感字段本身有索引,必须将其删除。

步骤S400加密敏感数据,如果原表中有记录,调用加密算法将敏感数据进行加密,并将密文保存到相应的新增密文字段中,同时清空原始字段的数据内容。如果该字段需要实现密文索引,则建立密文索引,然后进行步骤S500,若不需要实现密文索引,则直接进行步骤S500。

实现密文索引的方法为:基于数据库的表和SQL语言,建立辅助的实现密文索引数据结构以及查询和维护算法。利用数据库系统的索引扩展机制,实现密文索引的调用和维护。

在密文索引机制中应包括:一个对原表记录D的索引,用于根据该ID实现快速解密得到明文;一个根据明文实际取值的偏序保持算法,用于实现快速的范围查询。其中,实现密文偏序关系的索引结构采用具有索引功能的数据结构,例如AVL树、B+树或B-树等。

数据库系统的索引扩展机制为公知的扩展索引,如Oracle的扩展索引、或者IBM的扩展索引。这些扩展索引机制,允许用户为特定的字段自定义索引方法。

由于密文索引以表的形式存储于数据库中,且由触发器自动维护,从而自动实现了多用户的数据同步和事务机的提交和回滚机制。

步骤S500创建函数,用于控制授权用户可以查看加密列的明文数据,非授权用户只能查看加密列的密文数据。

步骤S600创建一个与原表同名的视图,该视图取原表的所有字段,其中,敏感字段用解密函数代替,并且要根据权限函数进行解密。

步骤S700创建触发器和存储过程,在视图上建立instead of类型的插入、删除和修改事件的触发器。在触发器中,调用加密算法将敏感数据加密,并把密文保存在表中的密文字段中。如果原表有约束,为了保持数据完整性,则使用SQL语言实现约束。

步骤S800实现扩展索引接口,对原表进行上述改造之后,表中的数据分为敏感数据和非敏感数据两类。其中,敏感数据以密文的形式存放在表中,而非敏感数据则以明文的形式存放。由于视图名与原始表名相同,用户对表的操作都会作用在视图上。当用户查询数据时,视图能够自动调用解密函数将密文数据解密,并将明文数据返回给用户;当用户修改数据时,用户在视图上的操作都能够由instead of触发器完成,从而实现了对敏感数据的透明加密和解密。

实施例2:

本发明一种基于国产数据库的透明加密系统,包括原始表改名模块、约束配置模块、索引删除模块、数据加密模块、函数创建模块、视图创建模块、触发器建立模块以及索引接口,该系统可执行实施例1公开的方法。

原始表改名模块用于对原始表改名,并在原始表中添加RAW字段,RAW字段用于存储密文中的字段。

对于原始表,所述约束配置模块用于删除建立在敏感字段上的约束,基于主键和外键约束的字段不能被选取作为加密字段,对于敏感字段上的唯一性约束,非空约束和值约束均被禁用。

对于原始表中敏感字段,如果敏感字段本身有索引,所述索引删除模块用于将索引删除。

如果原始表中记录有敏感字段,数据加密模块用于调用加密算法对敏感数据进行加密,并将密文保存至RAW字段中,并清空原始敏感字段中数据内容;如果敏感字段需要实现密文索引,数据加密模块用于建立密文索引,密文索引以表的形式存储于数据库中。

本实施例中,数据加密模块用于执行如下实现密文索引:基于数据库的表和SQL语言,建立辅助的实现密文索引数据结构以及查询和维护算法,利用数据库系统的索引扩展机制、实现密文索引的调用和维护。

数据库的索引扩展机制为公知的扩展机制,包括Oracle的扩展索引或者IBM的扩展索引,所述公知的扩展索引机制允许用户为特定的字段自定义索引方法。

数据库系统的索引扩展机制包括如下:

(1)一个对原表记录的索引,用于根据ID实现快速解密得到明文;

(2)一个根据明文实际取值的偏序保持算法,用于实现快速的范围查询。其中,实现密文偏序关系的索引结构采用具有索引功能的数据结构,数据结构为AVL树、B+树或B-树。

函数创建模块用于创建权限函数,权限函数用于控制授权用户可以查看加密列的明文数据,非授权用户只能查看加密列的密文数据。

视图创建模块用于创建一个与原始表同名的视图,视图中选取原始表的所有字段,其中,敏感字段用解密函数代替,并且要根据权限函数进行解密。

触发器建立模块用于在视图上建立触发器,在触发器中,调用加密算法将敏感数据加密,并将密文保存在RAW字段中,如果原始表中有约束,实现约束。

本实施例中,触发器建立模块用于在视图上建立instead of类型的触发器,触发器用于插入、删除和修改事件。如果原始表中有约束,触发器建立模块用于使用SQL语言实现约束。

对于修改后的原始表,表中的数据分为敏感数据和非敏感数据,敏感数据以密文的形式存放在表中,而非敏感数据则以明文的形式存放,视图名与原始表名相同,索引接口用于执行如下:用户对原始表的操作均会作用在视图上,当用户查询数据时,视图能够自动调用解密函数将密文数据解密,并将明文数据返回用户;当用户修改数据时,用户在视图上的操作都能够由触发器完成。

上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。

相关技术
  • 一种基于保留格式的数据库透明加密方法
  • 一种基于保留格式的数据库透明加密方法
技术分类

06120116483656