一种数据仓库中的数据保护方法及装置与流程

文档序号:11627731阅读:183来源:国知局
本发明涉及数据安全领域,尤其涉及一种数据仓库中的数据保护方法及装置。
背景技术
::hive是一种数据仓库基础构架。它是一种可以存储、查询和分析存储在分布式文件系统(hdfs)中的数据的机制,它将传统的结构化数据表与hdfs上的数据文件进行映射,并提供简单的类结构化查询语言(sql),进行查询。其中,sql也称作查询语言(hql),同时它可以将sql语句转换为编程模型(mapreduce)任务进行运行,从而实现大规模数据的处理。hive中用于承载数据的资源实体包括数据库、表、分区和桶,其中库可以看成多个表的集合,所以可以认为用户数据实际上都是存放在表、分区及桶三种实体对象中,所以,hive中所有的操作实际上都可以看成是对表、列、分区或桶的操作。hive作为大规模的数据仓库和离线分析平台,目前已得到了非常广泛的应用,但随之而来的数据安全性问题却没有引起足够的重视。其中,hive的数据安全性问题体现在下面几个方面:1、hive中所有用户都是平行的,没有系统超级管理员,无法对系统进行全局管理,无法限制某些非法用户的访问。2、hive中的各用户之间可以相互授权,但是只能对表的操作进行授权,对于列、分区或桶无法进行授权,即只能允许或禁止用户访问某个表,导致无法根据需要对表数据进行列级别、分区级别、桶级别的操作控制,如只允许或禁止用户访问某几列或访问某几个桶的数据等。3、更为重要的是,hive中的数据对应的数据文件是存放在hdfs上,hive对于存放在hdfs上的文件,通常采用的存储格式是文本格式(text)或者记录列文件格式(recordcolumnarfile,rcfile),如果某个hive用户没有得 到其他hive用户的授权,获得查询其他用户创建的表、列、分区或桶的权限,但仍然能通过其他方式直接获取底层hdfs文件的方式,获取数据信息,这样相当于绕过了hive的上层的权限控制机制,给数据仓库的数据安全造成了严重威胁。针对上述问题,目前暂时没有发现完整、系统化的方案提出,现有技术往往通过第三方工具对数据进行简单加密来进行数据保护或者通过引入安全认证(kerberos)组件对用户进行认证。具体方法如下:现有方法1:hive现有的权限控制流程不变,在数据导入hive的表之前,就对原始数据采用第三方加密工具进行加密,再导入到hive的表中,收到查询请求,先将数据从hive表中导出,再手工进行解密。缺点:只能有限的解决问题;由于要反复进行数据的导入导出,操作繁琐、耗时;第二,数据是在hive之外通过部署其他加密工具实现的,增加了系统的复杂性,而且,数据加密后,数据长度一般会增加,再导入到hive中时,会降低hive系统的导入效率。并且,由于数据是在进入hive之前加密的,无法借用hive的mapreduce处理能力。最后,只能按照指定方式(通常是一个表)进行数据加密,无法灵活的选择加密对象,比如选择某一个或几个表、列、分区或桶等。现有方法2:在hive权限控制中引入第三方kerberos(网络认证协议)组件:在hive的权限控制模块中可以直接接入第三方的kerberos组件,作为权限控制模块的一部分,通过kerberos组件进一步对用户进行认证,防止恶意用户伪造用户。但这种方式部署成本比较高,而且非常复杂,kerberos组件生成证书和配置的步骤相当繁琐,首次配置也许可以接受,但是对于用户权限的修改,机器的减容扩容,会造成证书要重新生成,再分发证书,重启系统。而且还要考虑kerberos的宕机导致整个集群无法服务的风险,加上kerberos的自身配置也比较复杂,而且存在效率问题,这些考虑,也导致kerberos在大数据上的应用比较稀少。另外,这个方式无法解决授权的级别问题,且这种方式无法对底层hdfs的数据施加保护。综上所述,现有技术中的数据保护方法,存在安全机制不健全、操作繁琐、 耗时,无法对表、列、分区及桶进行灵活操作,且保密程度不高、效率低下及部署成本较高的问题。技术实现要素:为了克服现有技术存在的上述问题,本发明的实施例提供了一种数据仓库中的数据保护方法及装置,能够通过对数据仓库用户实施接入控制及列、分区或桶级别的权限控制,并结合对用户数据进行加密,实现了对数据仓库中的数据的有效保护。为了解决上述技术问题,本发明采用如下技术方案:依据本发明实施例的一个方面,提供了一种数据仓库中的数据保护方法,包括:接收用户输入的用户请求,所述用户请求中携带有用户身份信息和操作请求,其中,所述操作请求包括表级别的操作请求、列级别的操作请求、分区级别的操作请求和桶级别的操作请求中的一种或多种;判断所述用户身份信息及所述操作请求是否合法;若所述身份信息和所述操作请求均合法,则判断所述操作请求的操作类型;若所述操作请求为非授权操作,则对数据仓库中的新增数据或已有数据进行加密。其中,上述方案中,所述判断所述用户身份信息及所述操作请求是否合法,包括:根据所述用户身份信息,判断所述用户是否存在于预先存储的白名单中,若存在,则所述用户身份信息合法;判断执行所述操作请求的权限是否是所述用户所具有的预设操作权限,若是,则所述操作请求合法。其中,上述方案中,所述非授权操作包括:创建表操作、数据导入操作、修改表操作、对已有数据的加密操作、数据查询操作。其中,上述方案中,对数据仓库中的新增数据进行加密,包括:获取创建表操作,并根据所述创建表操作中携带的表的结构信息创建表;判断所述创建表操作中是否携带有第一加密配置信息,其中,所述第一加 密配置信息包括需要加密的表的名称、列的名称、分区的名称和桶的名称中的一种或多种,以及加密/解密算法;若是,将所述第一加密配置信息存储在加密信息表中;获取数据导入操作,其中,所述数据导入操作中携带有需要导入数据的第一目标表的名称、第一目标列的名称、第一目标分区的名称和第一目标桶的名称中的一种或多种,其中,所述第一目标表包括创建的表中的一个或多个,所述第一目标列包括创建的表的一个或多个列,所述第一目标分区包括创建的表的一个或多个分区,所述第一目标桶包括创建的表的一个或多个桶;判断所述第一目标表、所述第一目标列、所述第一目标分区和所述第一目标桶中的一种或多种在所述加密信息表中是否存储有对应的加密算法;若是,则获取与所述第一目标表、所述第一目标列、所述第一目标分区和所述第一目标桶中的一种或多种对应的加密算法;获取所要导入的数据,并利用获取的加密算法对所要导入的数据进行加密,获得第一加密数据;将所述第一加密数据对应写入到所述第一目标表、所述第一目标列、所述第一目标分区和所述第一目标桶中的一种或多种中。其中,上述方案中,对数据仓库中的已有数据进行加密,包括:获取修改表操作;判断所述修改表操作中是否携带有第二加密配置信息,所述第二加密配置信息包括需要加密的第二目标表的名称、第二目标列的名称、第二目标分区的名称和第二目标桶的名称中的一种或多种,以及加密/解密算法;若是,利用所述修改表操作中携带的加密算法对所述第二目标表、所述第二目标列、所述第二目标分区、所述第二目标桶中的一种或多种中的数据进行加密;将所述第二加密配置信息存储在所述加密信息表中。其中,上述方案中,对数据仓库中的已有数据进行加密,包括:获取对已有数据的加密操作,其中,所述对已有数据的加密操作中携带有待处理表的名称以及第三加密配置信息,其中,所述第三加密配置信息包括需要加密的第三目标表的名称、第三目标列的名称、第三目标分区的名称和第三 目标桶的名称中的一种或多种,以及加密/解密算法,其中,所述第三目标表包括所述待处理表中的一个或多个,所述第三目标列包括所述待处理表的一个或多个列,所述第三目标分区包括所述待处理表的一个或多个分区,所述第三目标桶包括所述待处理表的一个或多个桶;创建与所述待处理表具有相同结构的临时表;获取数据查询操作,并依据所述数据查询操作查询所述第三目标表、所述第三目标列、所述第三目标分区、所述第三目标桶中的一种或多种中的数据,获得查询数据;将所述查询数据对应写入所述临时表中;利用所述对已有数据的加密操作中携带的加密算法,对写入所述临时表中的查询数据进行加密,获得第二加密数据;将所述第二加密数据以覆盖方式对应写入所述待处理表中;将所述第三加密配置信息存储在所述加密信息表中;删除所述临时表。其中,上述方案中,所述获取数据查询操作,并依据所述数据查询操作查询所述第三目标表、所述第三目标列、所述第三目标分区、所述第三目标桶中的一种或多种中的数据,获得查询数据,包括:获取所述数据查询操作,其中,所述数据查询操作中携带所述第三目标表的名称、所述第三目标列的名称、所述第三目标分区的名称、所述第三目标桶的名称中的一种或多种;根据所述数据查询操作,从分布式文件系统中读取所述第三目标表、所述第三目标列、所述第三目标分区、所述第三目标桶中的一种或多种中的数据;判断所述第三目标表、所述第三目标列、所述第三目标分区、所述第三目标桶中的一种或多种中是否存在已加密数据;若是,从所述加密信息表中获取与所述已加密数据所在的表、列、分区和桶中的一种或多种相对应的解密算法;利用所述解密算法,对所述已加密数据进行解密,获得所述查询数据。其中,上述方案中,所述判断所述操作请求的操作类型之后,还包括:若所述操作请求为授权操作,则判断所述授权操作中携带的所述用户授权 其他用户进行操作的表、列、分区和桶中的一种或多种是否属于所述用户;若是,则执行所述授权操作,否则,取消所述授权操作。其中,上述方案中,将所述第一加密配置信息或所述第二加密配置信息或所述第三加密配置信息存储在所述加密信息表中之后,还包括:采用预设加密算法,对所述加密信息表中的数据进行加密。依据本发明实施例的另一个方面,还提供了一种数据仓库中的数据保护装置,包括:接收模块,用于接收用户输入的用户请求,所述用户请求中携带有用户身份信息和操作请求,其中,所述操作请求包括表级别的操作请求、列级别的操作请求、分区级别的操作请求和桶级别的操作请求中的一种或多种;第一判断模块,用于判断所述用户身份信息及所述操作请求是否合法;第二判断模块,用于当所述第一判断模块的判断结果为是时,判断所述操作请求的操作类型;加密模块,用于当所述第二判断模块判断所述操作请求为非授权操作时,对数据仓库的新增数据或已有数据进行加密。其中,上述方案中,所述第一判断模块包括:第一判断单元,用于根据所述用户身份信息,判断所述用户是否存在于预先存储的白名单中,若存在,则所述用户身份信息合法;第二判断单元,用于判断执行所述操作请求的权限是否是所述用户所具有的预设操作权限,若是,则所述操作请求合法。其中,上述方案中,所述非授权操作包括:创建表操作、数据导入操作、修改表操作、对已有数据的加密操作、数据查询操作。其中,上述方案中,所述加密模块包括:第一获取单元,用于获取创建表操作,并根据所述创建表操作中携带的表的结构信息创建表;第三判断单元,用于判断所述创建表操作中是否携带有第一加密配置信息,其中,所述第一加密配置信息包括需要加密的表的名称、列的名称、分区的名称和桶的名称中的一种或多种,以及加密/解密算法;第一存储单元,用于当所述第三判断单元的判断结果为是时,将所述第一 加密配置信息存储在加密信息表中;第二获取单元,用于获取数据导入操作,其中,所述数据导入操作中携带有需要导入数据的第一目标表的名称、第一目标列的名称、第一目标分区的名称和第一目标桶的名称中的一种或多种,其中,所述第一目标表包括创建的表中的一个或多个,所述第一目标列包括创建的表的一个或多个列,所述第一目标分区包括创建的表的一个或多个分区,所述第一目标桶包括创建的表的一个或多个桶;第四判断单元,用于判断所述第一目标表、所述第一目标列、所述第一目标分区和所述第一目标桶中的一种或多种在所述加密信息表中是否存储有对应的加密算法;第三获取单元,用于当所述第四判断单元的判断结果为是时,获取与所述第一目标表、所述第一目标列、所述第一目标分区和所述第一目标桶中的一种或多种对应的加密算法;第一加密单元,用于获取所要导入的数据,并利用获取的加密算法对所要导入的数据进行加密,获得第一加密数据;第一写入单元,用于将所述第一加密数据对应写入到所述第一目标表、所述第一目标列、所述第一目标分区和所述第一目标桶中的一种或多种中。其中,上述方案中,所述加密模块包括:第四获取单元,用于获取修改表操作;第五判断单元,用于判断所述修改表操作中是否携带有第二加密配置信息,所述第二加密配置信息包括需要加密的第二目标表的名称、第二目标列的名称、第二目标分区的名称和第二目标桶的名称中的一种或多种,以及加密/解密算法;第二加密单元,用于在所述第五判断单元的判断结果为是时,利用所述修改表操作中携带的加密算法对所述第二目标表、所述第二目标列、所述第二目标分区、所述第二目标桶中的一种或多种中的数据进行加密;第二存储单元,用于将所述第二加密配置信息存储在所述加密信息表中。其中,上述方案中,所述加密模块包括:第五获取单元,用于获取对已有数据的加密操作,其中,所述对已有数据 的加密操作中携带有待处理表的名称以及第三加密配置信息,其中,所述第三加密配置信息包括需要加密的第三目标表的名称、第三目标列的名称、第三目标分区的名称和第三目标桶的名称中的一种或多种,以及加密/解密算法,其中,所述第三目标表包括所述待处理表中的一个或多个,所述第三目标列包括所述待处理表的一个或多个列,所述第三目标分区包括所述待处理表的一个或多个分区,所述第三目标桶包括所述待处理表的一个或多个桶;创建单元,用于创建与所述待处理表具有相同结构的临时表;查询单元,用于获取数据查询操作,并依据所述数据查询操作查询所述第三目标表、所述第三目标列、所述第三目标分区、所述第三目标桶中的一种或多种中的数据,获得查询数据;第二写入单元,用于将所述查询数据对应写入所述临时表中;第三加密单元,用于利用所述对已有数据的加密操作中携带的加密算法,对写入所述临时表中的查询数据进行加密,获得第二加密数据;第三写入单元,用于将所述第二加密数据以覆盖方式对应写入所述待处理表中;第三存储单元,用于将所述第三加密配置信息存储在所述加密信息表中;删除单元,用于删除所述临时表。其中,上述方案中,所述查询单元包括:第一获取子单元,用于获取所述数据查询操作,其中,所述数据查询操作中携带所述第三目标表的名称、所述第三目标列的名称、所述第三目标分区的名称、所述第三目标桶的名称中的一种或多种;查询子单元,用于根据所述数据查询操作,从分布式文件系统中读取所述第三目标表、所述第三目标列、所述第三目标分区、所述第三目标桶中的一种或多种中的数据;判断子单元,用于判断所述第三目标表、所述第三目标列、所述第三目标分区、所述第三目标桶中的一种或多种中是否存在已加密数据;第二获取子单元,用于当所述判断子单元的判断结果为是时,从所述加密信息表中获取与所述已加密数据所在的表、列、分区和桶中的一种或多种相对应的解密算法;解密子单元,用于利用所述解密算法,对所述已加密数据进行解密,获得所述查询数据。其中,上述方案中,其特征在于,还包括:授权模块,用于当所述第二判断模块判断所述操作请求为授权操作,判断所述授权操作中携带的所述用户授权其他用户进行操作的表、列、分区和桶中的一种或多种是否属于所述用户,若是,则执行所述授权操作,否则,取消所述授权操作。其中,上述方案中,所述加密模块还包括:第四加密单元,用于采用预设加密算法,对所述加密信息表中的数据进行加密。本发明实施例的有益效果是:本发明实施例的数据仓库中的数据保护方法,通过对接收的用户请求中携带的用户身份信息及操作请求的合法性判断,实现了对数据仓库用户的接入控制,防止了非法用户的访问;通过表级别、列级别、分区级别以及桶级别的操作请求实现了对用户数据的灵活操作;通过对用户数据的加密,进一步实现了对数据仓库中的数据的保护。因此,本发明实施例的数据仓库中的数据保护方法,能够实现对数据仓库中的数据的有效保护。附图说明图1表示本发明第一实施例的数据仓库中的数据保护方法的流程图;图2表示本发明第二实施例的数据仓库中的数据保护装置的结构框图之一;图3表示本发明第二实施例的数据仓库中的数据保护装置的结构框图之二;图4表示本发明第三实施例的数据仓库中的数据保护装置的结构框图;图5表示本发明第三实施例的数据仓库中的数据保护装置的应用主流程图;图6表示本发明第三实施例的数据仓库中的数据保护装置的应用的第一分支流程图;图7表示本发明第三实施例的数据仓库中的数据保护装置的应用的第二分支流程图;图8表示本发明第三实施例的数据仓库中的数据保护装置的应用的第三分支流程图;图9表示本发明第三实施例的数据仓库中的数据保护装置的应用的第四分支流程图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。第一实施例依据本发明实施例的一个方面,提供了一种数据仓库中的数据保护方法,该方法,首先,接收用户输入的用户请求,所述用户请求中携带有用户身份信息和操作请求,其中,所述操作请求包括表级别的操作请求、列级别的操作请求、分区级别的操作请求和桶级别的操作请求中的一种或多种;接着,判断所述用户身份信息及所述操作请求是否合法;再次,若所述身份信息和所述操作请求均合法,则判断所述操作请求的操作类型;最后,若所述操作请求为非授权操作,则对数据仓库中的新增数据或已有数据进行加密。因此,本发明实施例的数据仓库中的数据保护方法,通过对数据仓库用户实施接入控制及列、分区或桶级别的权限控制,并结合对用户数据进行加密,实现了对数据仓库中的数据的有效保护。如图1所示,该方法包括:步骤s11、接收用户输入的用户请求。其中,所述用户请求中携带有用户身份信息和操作请求,其中,所述操作请求包括表级别的操作请求、列级别的操作请求、分区级别的操作请求和桶级别的操作请求中的一种或多种。当用户需要接入hive系统,进行某一数据操作时,该用户会向hive系统 输入一用户请求。为了方便对用户的身份信息进行核查,判断该用户是否是合法用户,需要在该用户请求中携带用户的身份信息,例如用户名称,用户的接入ip等。步骤s13、判断所述用户身份信息及所述操作请求是否合法。其中,步骤s13包括:根据所述用户身份信息,判断所述用户是否存在于预先存储的白名单中,若存在,则所述用户身份信息合法;判断执行所述操作请求的权限是否是所述用户所具有的预设操作权限,若是,则所述操作请求合法。在本发明实施例中,在hive系统中存储有白名单,该白名单中保存着具有数据访问权限的用户的身份信息,例如用户名称,用户的接入ip等。当收到用户请求时,通过读取白名单来判断携带在用户请求中的用户身份信息是否合法,即判断该用户是否是白名单中记录的用户,若是,则该用户身份信息合法,允许该用户接入,否则,拒绝。另外,在hive系统中还存储有合法用户对hive系统中的数据进行操作的预设操作权限。例如,将各个合法用户所具有的预设操作权限存储在操作权限表中。当判断接入hive系统的用户属于合法用户后,通过读取操作权限表,判断执行操作请求的权限,是否是该用户所具有的预设操作权限,即判断该用户是否具有对操作请求针对的表或列或分区或桶的操作权限(例如判断该用户是否具有创建表的权限),若是,则该操作请求合法,否则拒绝执行该操作请求,流程结束。步骤s15、若所述身份信息和所述操作请求均合法,则判断所述操作请求的操作类型。其中,操作请求的操作类型分为授权操作和非授权操作。授权操作指的是hive系统的合法用户可以授权其他用户访问该合法用户的某个列、某个分区或某个桶。非授权操作包括创建表操作、数据导入操作、修改表操作、对已有数据的加密操作、数据查询操作。其中,当操作请求为授权操作时,需要判断所述授权操作中携带的所述用户授权其他用户进行操作的表、列、分区和桶中的一种或多种是否属于所述用 户;若是,则执行所述授权操作,否则,取消所述授权操作。由此可知,本发明实施例,提供基于表、列、分区、桶级别的灵活授权,允许hive用户授权其他用户访问某个列、某个分区或某个桶。当操作请求为非授权操作时,执行步骤s17。步骤s17、若所述操作请求为非授权操作,则对数据仓库中的新增数据或已有数据进行加密。其中,对数据仓库中的新增数据进行加密的过程包括在创建表和数据导入的过程中。具体地,包括:获取创建表操作,并根据所述创建表操作中携带的表的结构信息创建表;判断所述创建表操作中是否携带有第一加密配置信息,其中,所述第一加密配置信息包括需要加密的表的名称、列的名称、分区的名称和桶的名称中的一种或多种,以及加密/解密算法;若是,将所述第一加密配置信息存储在加密信息表中;获取数据导入操作,其中,所述数据导入操作中携带有需要导入数据的第一目标表的名称、第一目标列的名称、第一目标分区的名称和第一目标桶的名称中的一种或多种,其中,所述第一目标表包括创建的表中的一个或多个,所述第一目标列包括创建的表的一个或多个列,所述第一目标分区包括创建的表的一个或多个分区,所述第一目标桶包括创建的表的一个或多个桶;判断所述第一目标表、所述第一目标列、所述第一目标分区和所述第一目标桶中的一种或多种在所述加密信息表中是否存储有对应的加密算法;若是,则获取与所述第一目标表、所述第一目标列、所述第一目标分区和所述第一目标桶中的一种或多种对应的加密算法;获取所要导入的数据,并利用获取的加密算法对所要导入的数据进行加密,获得第一加密数据;将所述第一加密数据对应写入到所述第一目标表、所述第一目标列、所述第一目标分区和所述第一目标桶中的一种或多种中。例如,需要创建一个表x,且要求位于表x的a列和b列中的数据加密。所以,首先需要根据创建表操作中携带的表的结构信息,例如,字段名称、数据类型等,创建一个只具有结构的空表x。由于该表x中存在需要加密的数 据,所以在创建表操作中携带有对表x的加密配置信息,即需要加密的a列和b列的名称,以及加密/解密算法。例如a列的名称为id,b列的名称为name,具体的sql语句举例如下:createtableencode_test(idint,namestring)rowformatserde'org.apache.hadoop.hive.serde2.lazy.lazysimpleserde'withserdeproperties('column.encode.columns'='id,name','column.encode.classname'='com.zte.encode.desrewriter')storedastextfile;其中:column.encode.columns指示了加密的列,如果为空,则表示全表加密,上面的示例中需要对2个列进行加密:id和name;column.encode.classname指示了加密的算法(类库),这里是des。其中,本发明实施例中采用开放式的插件架构,即hive系统中包括加密器和解密器类库,因此,可以调用对应于加密/解密算法的加密器/解密器来进行加密/解密,而且替换十分方便。另外,为了方便在数据导入时对需要加密的数据进行加密,需要将对应于表x的加密配置信息存储在加密信息表中。其中,加密信息表中包括基于表或列或分区或桶进行加密时所采用的加密算法。创建表完毕后,需要向创建的空表中导入数据。例如,需要向表x中的a列导入数据,则数据导入操作中会携带有a列的名称。然后,从加密信息表中读取与a列对应的加密算法,并采用该加密算法对需要导入的数据进行加密,最后将加密后的数据写入到表x的a列中。其中,由于hive中的数据对应的数据文件是存放在hdfs上,所以创建表x,就是在hdfs中创建一个对应与表x的空目录,并将该表x的结构信息(字段名称,字段类型等),也称作字典信息,存储在物理数据库中(如mysql、postgresql等)。其中,对数据仓库中的已有数据进行加密的过程可通过修改表的方式进行加密,也可通过创建临时表的方式实现。方式一:采用修改表的方式对数据仓库中的已有数据进行加密,包括:获取修改表操作;判断所述修改表操作中是否携带有第二加密配置信息,所述第二加密配置信息包括需要加密的第二目标表的名称、第二目标列的名称、第二目标分区的名称和第二目标桶的名称中的一种或多种,以及加密/解密算法;若是,利用所述修改表操作中携带的加密算法对所述第二目标表、所述第二目标列、所述第二目标分区、所述第二目标桶中的一种或多种中的数据进行加密;将所述第二加密配置信息存储在所述加密信息表中。即,将加密配置信息作为修改表操作的携带信息,当需要对某个表、某个列、某个分区或某个桶的数据进行加密时,可在修改表操作中携带某个表、某个列、某个分区或某个桶的名称(当然,也可以是表、列、分区、桶中多种的组合)以及加密/解密算法。在执行修改表操作时,直接调用与加密算法对应的加密器,对需要加密的表、列、分区或桶进行加密即可。其中,还可以修改加密时采用的加密算法,只需要将相应的表、列、分区或桶的加密算法修改为需要的算法即可,比如将分区ds=’2015’的加密算法改为des,如下:altertablecsetpartition(ds=’2015’)'partition.encode.classname'='com.zte.encode.desrewriter'。其中,需要注意的是,对于修改表操作中携带的加密配置信息同样需要保存在加密信息表中。方式二:创建临时表方式对数据仓库中的已有数据进行加密,包括:获取对已有数据的加密操作,其中,所述对已有数据的加密操作中携带有待处理表的名称以及第三加密配置信息,其中,所述第三加密配置信息包括需要加密的第三目标表的名称、第三目标列的名称、第三目标分区的名称和第三目标桶的名称中的一种或多种,以及加密/解密算法,其中,所述第三目标表包括所述待处理表中的一个或多个,所述第三目标列包括所述待处理表的一个或多个列,所述第三目标分区包括所述待处理表的一个或多个分区,所述第三目标桶包括所述待处理表的一个或多个桶;创建与所述待处理表具有相同结构的临时表;获取数据查询操作,并依据所述数据查询操作查询所述第三目标表、所述第三目标列、所述第三目标分区、所述第三目标桶中的一种或多种中的数据, 获得查询数据;将所述查询数据对应写入所述临时表中;利用所述对已有数据的加密操作中携带的加密算法,对写入所述临时表中的查询数据进行加密,获得第二加密数据;将所述第二加密数据以覆盖方式对应写入所述待处理表中;将所述第三加密配置信息存储在所述加密信息表中;删除所述临时表。其中,所述获取数据查询操作,并依据所述数据查询操作查询所述第三目标表、所述第三目标列、所述第三目标分区、所述第三目标桶中的一种或多种中的数据,获得查询数据,包括:获取所述数据查询操作,其中,所述数据查询操作中携带所述第三目标表的名称、所述第三目标列的名称、所述第三目标分区的名称、所述第三目标桶的名称中的一种或多种;根据所述数据查询操作,从分布式文件系统中读取所述第三目标表、所述第三目标列、所述第三目标分区、所述第三目标桶中的一种或多种中的数据;判断所述第三目标表、所述第三目标列、所述第三目标分区、所述第三目标桶中的一种或多种中是否存在已加密数据;若是,从所述加密信息表中获取与所述已加密数据所在的表、列、分区和桶中的一种或多种相对应的解密算法;利用所述解密算法,对所述已加密数据进行解密,获得所述查询数据。例如,需要对表y中m分区、n分区以及h分区中的已有数据进行加密。首先,需要创建一个与表y具有相同结构的临时表l,即创建一个与表y数据字典相同,但不加密的临时表l。然后,以数据查询的方式将分区m、分区n和h分区中的数据从hdfs中读出。其中,在对表y进行查询时,需要首先从数据查询操作中获取需要查询的分区m、分区n和分区h的名称;然后,从hdfs中读取分区m、分区n和分区h中的数据。其中,可能在读取的数据中存在有已加密数据,那么在将读出的数据写入到临时表l中之前,需要对已加密数据进行解密。在进行解密时,需要在加密信息表中查找对应与已加密数据所在的表或列或分区或桶 的解密算法,查找到时,应用对应与该解密算法的解密器对已加密数据进行解密,从而获得所查询的数据。当获得查询到的m分区、n分区和h分区的数据后,将这些数据对应写入到临时表l中。由于临时表l与表y具有相同的结构,所以临时表l中存在相同的分区。因此,所查询的数据实际上对应写入的临时表l中的m分区、n分区和h分区中。此时,可采用对已有数据加密操作中携带的加密算法对临时表l中m分区、n分区和h分区中的数据进行加密。加密完毕后,将加密后的m分区、n分区和h分区中的数据以覆盖方式写入到表y中的m分区、n分区和h分区中,并将之前创建的临时表l删除。其中,为了方便后续用户对表y中m分区、n分区和h分区中的数据进行某些数据操作,需要将m分区、n分区和h分区中所对应的加密/解密算法存储在加密信息表中。当对hive系统中的数据采用上述方法进行了加密后,在后续用户进行数据查询时,则需要从数据查询操作中获取需要查询的表的名称、列的名称、分区的名称和桶的名称中的一种或多种;然后,从hdfs中读取所要查询的表、列、分区和桶中的一种或多种中的数据;再次,从加密信息表中查找与所读取的表、列、分区和桶中的一种或多种对应的解密算法,若查找到,则利用查找到的解密算法进行解密,并将解密后的数据返回给用户;若未查找到,则直接将读取的数据返回给用户。另外,在hive系统中,加密信息表在元数据中采用隐藏表的形式进行保护。其中,也可采用对加密信息表进行加密的方式来保护加密信息表中的数据。那么,在上述方法中,将第一加密配置信息、第二加密配置信息或第三加密配置信息保存在加密信息表中之后,可采用预设加密算法,对加密信息表中的数据进行加密。操作权限表和白名单也属于元数据的一部分,所以,对操作权限表和白名单进行加密,同样可以保护操作权限表以及白名单中的数据的安全。其中,部署方法只需要设置hive.metastore.encode.class(元数据加密/解密类)配置参数为指定的加密/解密算法,比如aes加密/解密算法:com.zte.encode.aesrewriter。在元数据表(即加密信息表、操作权限表、 白名单)写入到物理库之前,对表字段的所有内容调用加密算法进行加密,反之,当元数据从物理库中读取出来后,则对字段内容调用解密算法进行解密。在本发明实施例的另外一方面,在某些特殊情况下,如果hive系统超级管理员没有配置权限控制,此时不能进行用户的接入控制,用户之间也不能相互授权,但数据还是同样可以进行加密保护,此时,在进行加密数据查询时,只有数据的所有者(表、列、分区或桶数据的所有者)来查询时,才会进行数据解密展示,非数据的所有者则看不到真实的数据(只能看到加密后的数据)。另外,hive系统的大规模数据处理是在mapreduce任务进行运行时实现的。在mapreduce运行时,中间过程会产生一些临时数据。因此,在某些情况下,需要对mapreduce的中间过程生成的临时数据做保护,mapreduce在执行过程中,可能需要将部分数据临时写到hdfs或磁盘上,这个数据就称为中间过程(如map阶段)生成的临时数据,这个数据往往是真实数据的一个小小片段,如果要对这个数据也做保护,可以将加密/解密算法也应用到mapreduce的中间过程,在中间过程的数据往hdfs或磁盘写入数据时,调用加密算法加密,在中间过程从hdfs或磁盘读入数据时,调用解密算法解密。其中,只需要设置hive.intermediate.compression.codec(中间数据编码方式)配置参数为指定的加密/解密算法,比如aes加密/解密算法:com.zte.encode.aesrewriter,即可实现中间生成数据的加密保护。第二实施例依据本发明实施例的另一个方面,还提供了一种数据仓库中的数据保护装置,如图2所示,该装置20包括:接收模块21,用于接收用户输入的用户请求,所述用户请求中携带有用户身份信息和操作请求,其中,所述操作请求包括表级别的操作请求、列级别的操作请求、分区级别的操作请求和桶级别的操作请求中的一种或多种;第一判断模块23,用于判断所述用户身份信息及所述操作请求是否合法;第二判断模块25,用于当所述第一判断模块23的判断结果为是时,判断所述操作请求的操作类型;加密模块27,用于当所述第二判断模块25判断所述操作请求为非授权操作时,对数据仓库的新增数据或已有数据进行加密。可选地,如图3所示,所述第一判断模块23包括:第一判断单元231,用于根据所述用户身份信息,判断所述用户是否存在于预先存储的白名单中,若存在,则所述用户身份信息合法;第二判断单元232,用于判断执行所述操作请求的权限是否是所述用户所具有的预设操作权限,若是,则所述操作请求合法。可选地,所述非授权操作包括:创建表操作、数据导入操作、修改表操作、对已有数据的加密操作、数据查询操作。可选地,如图3所示,所述加密模块27包括:第一获取单元271,用于获取创建表操作,并根据所述创建表操作中携带的表的结构信息创建表;第三判断单元272,用于判断所述创建表操作中是否携带有第一加密配置信息,其中,所述第一加密配置信息包括需要加密的表的名称、列的名称、分区的名称和桶的名称中的一种或多种,以及加密/解密算法;第一存储单元273,用于当所述第三判断单元272的判断结果为是时,将所述第一加密配置信息存储在加密信息表中;第二获取单元274,用于获取数据导入操作,其中,所述数据导入操作中携带有需要导入数据的第一目标表的名称、第一目标列的名称、第一目标分区的名称和第一目标桶的名称中的一种或多种,其中,所述第一目标表包括创建的表中的一个或多个,所述第一目标列包括创建的表的一个或多个列,所述第一目标分区包括创建的表的一个或多个分区,所述第一目标桶包括创建的表的一个或多个桶;第四判断单元275,用于判断所述第一目标表、所述第一目标列、所述第一目标分区和所述第一目标桶中的一种或多种在所述加密信息表中是否存储有对应的加密算法;第三获取单元276,用于当所述第四判断单元275的判断结果为是时,获取与所述第一目标表、所述第一目标列、所述第一目标分区和所述第一目标桶中的一种或多种对应的加密算法;第一加密单元277,用于获取所要导入的数据,并利用获取的加密算法对所要导入的数据进行加密,获得第一加密数据;第一写入单元278,用于将所述第一加密数据对应写入到所述第一目标表、所述第一目标列、所述第一目标分区和所述第一目标桶中的一种或多种中。可选地,如图3所示,所述加密模块27还包括:第四获取单元279,用于获取修改表操作;第五判断单元2710,用于判断所述修改表操作中是否携带有第二加密配置信息,所述第二加密配置信息包括需要加密的第二目标表的名称、第二目标列的名称、第二目标分区的名称和第二目标桶的名称中的一种或多种,以及加密/解密算法;第二加密单元2711,用于在所述第五判断单元2710的判断结果为是时,利用所述修改表操作中携带的加密算法对所述第二目标表、所述第二目标列、所述第二目标分区、所述第二目标桶中的一种或多种中的数据进行加密;第二存储单元2712,用于将所述第二加密配置信息存储在所述加密信息表中。可选地,如图3所示,所述加密模块27还包括:第五获取单元2713,用于获取对已有数据的加密操作,其中,所述对已有数据的加密操作中携带有待处理表的名称以及第三加密配置信息,其中,所述第三加密配置信息包括需要加密的第三目标表的名称、第三目标列的名称、第三目标分区的名称和第三目标桶的名称中的一种或多种,以及加密/解密算法,其中,所述第三目标表包括所述待处理表中的一个或多个,所述第三目标列包括所述待处理表的一个或多个列,所述第三目标分区包括所述待处理表的一个或多个分区,所述第三目标桶包括所述待处理表的一个或多个桶;创建单元2714,用于创建与所述待处理表具有相同结构的临时表;查询单元2715,用于获取数据查询操作,并依据所述数据查询操作查询所述第三目标表、所述第三目标列、所述第三目标分区、所述第三目标桶中的一种或多种中的数据,获得查询数据;第二写入单元2716,用于将所述查询数据对应写入所述临时表中;第三加密单元2717,用于利用所述对已有数据的加密操作中携带的加密算法,对写入所述临时表中的查询数据进行加密,获得第二加密数据;第三写入单元2718,用于将所述第二加密数据以覆盖方式对应写入所述 待处理表中;第三存储单元2719,用于将所述第三加密配置信息存储在所述加密信息表中;删除单元2720,用于删除所述临时表。可选地,所述查询单元2715包括:第一获取子单元,用于获取所述数据查询操作,其中,所述数据查询操作中携带所述第三目标表的名称、所述第三目标列的名称、所述第三目标分区的名称、所述第三目标桶的名称中的一种或多种;查询子单元,用于根据所述数据查询操作,从分布式文件系统中读取所述第三目标表、所述第三目标列、所述第三目标分区、所述第三目标桶中的一种或多种中的数据;判断子单元,用于判断所述第三目标表、所述第三目标列、所述第三目标分区、所述第三目标桶中的一种或多种中是否存在已加密数据;第二获取子单元,用于当所述判断子单元的判断结果为是时,从所述加密信息表中获取与所述已加密数据所在的表、列、分区和桶中的一种或多种相对应的解密算法;解密子单元,用于利用所述解密算法,对所述已加密数据进行解密,获得所述查询数据。可选地,如图3所示,还包括:授权模块29,用于当所述第二判断模块判断所述操作请求为授权操作,判断所述授权操作中携带的所述用户授权其他用户进行操作的表、列、分区和桶中的一种或多种是否属于所述用户,若是,则执行所述授权操作,否则,取消所述授权操作。可选地,如图3所示所述加密模块27还包括:第四加密单元2721,用于采用预设加密算法,对所述加密信息表中的数据进行加密。第三实施例如图4所示,为本发明另一实施例的数据仓库中的数据保护装置的结构框图。接入控制模块431:提供白名单功能,被权限控制模块43调用,只有用户在白名单之中,才允许接入系统,否则不允许接入。白名单由系统超级管理员根据指定的接口配置,通常以配置表(白名单表)的形式存储在元数据模块41,也可以以配置文件存储在本地硬盘。接入控制模块431是插件式组件,用户可以继承指定的接口,开发自定义的白名单功能。权限控制模块43:在hive原有权限控制模块的基础上,提供hive系统超级管理员功能,调用接入控制模块431提供的白名单功能进行接入控制,并提供基于列、分区、桶级别的灵活授权,允许hive用户授权其他用户访问某个列、某个分区或某个桶。语句解析模块44:对sql语句进行解析,本发明的加密信息是在创建表或修改表的sql语句中时定义的,所以在原有hive语句解析模块的基础上,增加对加密信息的解析,并将加密信息作为一张表写入到元数据模块41中,包括表是否加密,加密的列,分区、桶名称、加密器名称。序列化模块45:提供将数据写入到hdfs47中的功能。在序列化的过程中,数据长度往往会扩大,为了减少mapreduce网络传输的开销,所以在数据写入hdfs47的时候,进行数据加密。反序列化模块46:提供将从hdfs47上将表文件读入的功能,由于数据解密长度会减少,同样为了减少mapreduce网络传输的开销,所在反序列化的过程中,就进行数据解密。hdfs47:存储hive中的数据对应的数据文件,其中,hdfs47中的数据可通过反序列化模块46读取,通过序列化模块45将数据写入hdfs47中。元数据模块41:定义加密信息表、白名单表和操作权限表,存储表的加密信息、白名单信息和用户所具有的预设操作权限。表的加密信息包括表是否加密,加密的列,分区、桶、加密器名称。为了将对用户sql程序的影响减到最低,本发明在定义表时,将加密信息作为表数据字典定义信息的一部分,持久化到元数据模块41中,当有数据操作时,要做任何变动,由序列化模块45/反序列化模块46根据加密信息判断是否需要加密或解密。白名单表则存储用户名称、用户的接入ip等。数据加密/解密模块42:一个独立的插件式组件,只分别被序列化模块45 和反序列化模块46调用,提供数据加密/解密算法,实现数据加密/解密功能。本发明实现了高级加密标准(advancedencryptionstandard,aes)加密/解密算法,aes在密码学中又称rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的des,已经被多方分析且广为全世界所使用。目前,高级加密标准已然成为对称密钥加密中最流行的算法之一。该加密算法具有加密速度快,编码紧凑,安全性极高的优点。同时,该加密算法生成的加密数据在任何情况下只与原始数据和加密密钥相关,也就是只要加密的原始数据和密钥确定,那么在任何情况下,生成的加密数据都是相同的,反之对于解密也是同样的,只要获取到密钥,就能对加密数据进行解密,这也方便可以将该算法使用到mapreduce这样的多主机、多节点的运算环境中。同时由于本发明采用一种插件式架构,用户只要通过继承本发明定义的接口,也可以开发自定义的加密/解密插件。密钥配置模块421:数据加密/解密模块42的子模块,专门用于合成加密/解密的密钥,在加密过程中,hive系统为每个用户分配一个32位长的用于加密的加密密钥(key),该分配的key与用户的自定义key合成用户的加密密钥,并通过jdbc接口写入到元数据模块41中。基于图4的结构框图,当有用户接入时,图4所示的各个模块按照如图5所示的流程图执行,即按照步骤s51~s513执行。具体地,步骤s51、用户请求,即用户输入用户请求。步骤s52、通过元数据模块41读取用户白名单;因为白名单中存储着具有合法接入权限的用户的身份信息,所以为了便于对输入用户请求的用户的身份信息进行判断,需要从元数据模块41中读取白名单。步骤s53、判断该用户是否在白名单内;即权限控制模块43调用接入控制模块431提供的白名单功能,判断用户是否在白名单之内,若在,则允许接入,并执行步骤s54,否则不允许接入,进入步骤s513中,即结束流程。因此,只有通过权限控制模块43认证的用户才允许接入hive进行后面的操作。步骤s54、权限控制模块43获取用户权限,与操作中要求的权限对比,即权限控制模块43从元数据模块41中读取操作权限控制表。步骤s55、判断是否是授权操作;若属于授权操作,执行步骤s56,否则 执行步骤s57。步骤s56、若授权的表、列、分区或桶属于该用户,则成功授权,否则失败返回。步骤s57、判断用户是否具备相应操作权限,若具备,执行步骤s58,若不具备,执行步骤s513。步骤s58、判断用户的操作请求类别;其中,请求类别包括创建表、修改表、数据导入、数据查询、对已有数据加密保护。具体地,当操作请求为创建表或修改表时,执行步骤s59,参见图6的第一分支流程;当操作请求为数据导入时,执行步骤s510,参见图7的第二分支流程;当操作请求为数据查询时,执行步骤s511,参见图8的第三分支流程;当操作请求为对已有数据加密保护时,执行步骤s512,参见图9的第四分支流程。其中,如图6所示,当操作请求为创建表或修改表时,执行步骤s591~s595。具体如下:步骤s591、执行创建表或修改表语句(其中,如果需要创建加密的表、列、分区或桶,则要在数据字典中定义加密的表、列、分区或桶)。步骤s592、将表的数据字典信息通过元数据模块41写入到物理数据库中。步骤s593、判断创建表或修改表的语句中是否携带了加密配置信息,若是,执行步骤s594,若否,执行步骤s595。步骤s594、将加密配置信息通过元数据模块41写入到物理库中的加密信息表中。步骤s595、流程结束。其中,如图7所示,当操作请求为数据导入时,执行步骤s5101~s5107。具体如下:步骤s5101、执行mapreduce流程。步骤s5102、在mapreduce流程的最后,调用序列化模块45向hdfs47序列化数据。步骤s5103、通过元数据模块41读取元数据表信息,包括加密信息。步骤s5104、判断导入的目标表、列、分区或桶是否加密,若是,执行步骤s5105,若否,执行步骤s5106。步骤s5105、在序列化过程中,调用加密/解密模块42提供的加密算法进行数据加密。即序列化模块45调用密钥配置模块421合成密钥,调用元数据模块41获取待加密的列、分区或桶及加密/解密算法名,加载指定的加密/解密算法,根据指定的加密数据(待加密的列、分区或桶)和密钥完成数据加密。步骤s5106、数据写入hdfs47中,mapreduce结束。步骤s5107、流程结束,即将数据写入到hdfs47中后,此部分的流程结束。其中,如图8所示,当操作请求为数据查询时,执行步骤s5111~s5118。具体如下:步骤s5111、开始执行mapreduce流程。步骤s5112、在mapreduce的开始,调用反序列化模块46从hdfs47上读取数据。步骤s5113、通过元数据模块41读取元数据信息,包括加密表信息.步骤s5114、判断查询的表、列、分区或桶是否有加密,若有加密,执行步骤s5115,若没有加密,执行步骤s5116。步骤s5115、在反序列化过程中,调用加密/解密模块42提供的解密算法进行数据解密。步骤s5116、数据读取完毕后,mapreduce结束。步骤s5117、将查询数据返回给用户。步骤s5118、流程结束,即,将查询数据返回给用户后,流程结束。其中,如图9所示,当操作请求为对已有数据加密保护时,执行步骤s5121~s51211。具体如下:步骤s5121、对源表(列、分区或桶)执行查询。步骤s5122、查询流程参见图8,查询完成后,获取所要查询的数据。步骤s5123、创建同源表数据字典相同,但不加密的普通临时表。步骤s5124、将上面查询的数据导入到临时表中。步骤s5125、执行mapreduce。步骤s5126、在mapreduce流程的最后,调用序列化模块45向hdfs47序列化数据。步骤s5127、判断源表的某些表、列、分区或桶是否需要加密;若是,执行步骤s5128,否则执行步骤s5129。步骤s5128、在序列化过程中,调用加密/解密模块42提供的加密算法进行数据加密。步骤s5129、数据写入hdfs47中,mapreduce流程结束。即,将加密后的数据以覆盖方式写入源表中。步骤s51210、删除普通临时表,以节省系统的存储空间。步骤s51211、流程结束,即,删除普通临时表后,该部分流程结束。其中,创建临时表的步骤与对源表的查询步骤的先后顺序并不局限于此。在图4所示的结构框图中,由于数据加密/解密模块42的存在,使得加密/解密算法已经加载到系统中,所以可以延伸处一种简化实施方式,即直接通过自定义函数(udf)定义加密/解密函数,而无需再进行数据字典的定义,从而可以不需要通过语句解析模块44解析获取加密信息,以及将加密信息存储元数据库的过程。比如:selecta,encode(b)fromtbl,通过加密算法中的encode接口对表tbl的b字段内容进行了加密,再将加密后的结果a和encode(b)导入到另一张预先定义的表tbl_encrypt,此表作为数据加密后的存放地,收到查询请求时,则调用解密函数decode,如:selecta,decode(c)fromtbl_encrypt,c的内容即为encode(b),以此进行数据解密展示,这种方式不需要像在创建表或修改表那样需要在数据字典中定义,但需要对原始sql进行改造,增加对自定义函数的调用,并且要人为的保证加密的表、列、分区或桶和解密时完全一致。综上所述,本发明通过用户权限控制和数据加密来实现的hive数据保护,旨在通过对hive用户实施接入控制及列、分区或桶级别的权限控制,并结合对用户数据进行基于表、列、分区或桶级别的加密/解密,实现保护hive数据仓库中的数据的目的,从而克服了现有技术中存在的安全机制不健全、操作繁琐、耗时,无法对表、列、分区及桶进行灵活加密、保密程度不高、效率低下及部署成本较高的问题。以上所述的是本发明的优选实施方式,应当指出对于本
技术领域
:的普通人员来说,在不脱离本发明所述的原理前提下还可以作出若干改进和润饰,这些改进和润饰也在本发明的保护范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1