大数据脱敏到文件资料和文件资料导入大数据库地实现Word文件下载.docx
《大数据脱敏到文件资料和文件资料导入大数据库地实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《大数据脱敏到文件资料和文件资料导入大数据库地实现Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
一、缩略语和关键术语定义
〔下文出现的英文缩写术语在此提供对应的英文全称和中文译文,或中文专业术语的详细解释〕
敏感数据,指不为大众知悉,具有实际和潜在利用价值,丢失、不当使用或XX访问对社会、企业或个人造成危害的信息,如个人隐私信息、业务经营信息、财务信息、人事信息、IT运维信息等。
数据脱敏,指对某些敏感信息通过脱敏规如此进展数据的变形,实现敏感数据的可靠保护。
脱敏数据,指敏感数据经过数据脱敏处理后,不再包含某些敏感信息的数据。
数据迁移,指将数据从一个载体迁移到另一个载体,比如:
从数据库A迁移到数据库B,从文件A迁移到数据库A,从数据库A迁移到文件A等。
XML,即可扩展标记语言(ExtensibleMarkupLanguage)。
标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。
如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。
XML是从SGML中简化修改出来的。
文件的导出,即将源数据库中脱敏后的数据导入到指定格式的文件中。
文件的导入,即将excel文件经过脱敏操作过后导入到目标数据库中。
二、背景技术以与与本申请相关的现有技术
1、背景技术
〔即帮助理解本专利技术内容的公知常识,您基于什么样的背景发明的该专利〕:
随着信息技术的开展与大数据时代的到来,数据流通成为释放数据红利与价值的主要手段和途径,敏感数据在流通中缺乏有效管控,处于高风险状态。
近年来,敏感数据泄漏事件屡见不鲜。
敏感数据泄漏带来的不仅仅是经济损失,同时损害了金融机构和政府部门等权威机构的公信力,严重破坏了社会信用体系,影响了相关产业与全社会健康和谐开展。
在这样的时代背景下,防止敏感数据的泄漏成为了十分重要的问题,因此我们开发了数据脱敏网关。
数据脱敏网关就是针对敏感数据进展数据脱敏,保证数据在做数据迁移的和使用时的安全性和某某性。
数据脱敏网关主要实现了敏感数据在数据库之间的脱敏和迁移,针对客户的需求,又参加了数据库到文件〔支持的文件格式有csv,excel,json,xml,txt〕的脱敏,和文件〔暂时只支持07版以前的excel,或者excel压缩打包后的zip包〕到数据库的脱敏。
2、与本专利最接近的现有技术
〔现有技术就是已经有的技术,如果该现有技术的缺点正是本发明能够消除的,如此为相关现有技术,否如此为非相关现有技术;
相关现有技术中,与本专利共同的技术特征最多的,可视为最接近现有技术〕
最接近现有技术是数据脱敏网关中的数据迁移管理模块,实现了数据库之间的脱敏迁移。
〔给出现有技术的系统图、流程图,结合附图说明现有技术的实现过程〕
数据迁移管理模块作为数据脱敏网关的核心功能,其下又分为三个子模块:
策略管理,任务管理,任务日志管理,集成在数据脱敏网关中。
如如下图:
策略管理:
实现了相关脱敏策略的增删改查操作。
任务管理:
实现了相关脱敏任务的增删改查操作,改子模块是脱敏迁移管理的核心功能,整个的数据脱敏迁移都是在这里实现,目前实现了数据库到数据的脱敏迁移,数据到csv文件的脱敏迁移。
任务日志管理:
简单的任务日志查看功能。
数据库脱敏迁移流程图
〔一定是采用本专利申请技术方案后能够消除的缺点,缺点可以是多个〕
现有数据迁移管理模块中,只是针对了数据库之间的脱敏迁移,在文件〔excel〕方面功能还不够完善,只存在简单的csv文件的导出功能,在遇到客户需要其他文件格式的时候,比如excel,xml,json等文件格式的时候没有良好的支持。
三、本申请所解决的技术问题
〔针对上述2.2点提出的缺点,引出发明动机,阐述本专利要解决的技术问题〕
在数据脱敏中,脱敏后的数据存放在一个List<
Map<
String,Object>
>
集合中,其中每一个Map都对应数据库里面的一个数据,string为其列名,object为其值。
难点在于怎样将数据按照每个文件对应的格式转换写入到文件当中,而且在excel文件存在不同版本的区别,07版以前的excel每一个sheet只支持65535行的数据量,而07版本以后支持100万+行的数据量,map中的健对应excel的表头列名。
xml的数据也有固定的格式要求,下文会贴出例子;
而json数据在Java里面有现有的方法实现,就不做详细的阐述了。
XML数据格式:
<
nodes>
node>
keylabel="
key1"
value1<
/key>
key2"
value2<
......
/node>
/nodes>
备注:
每一个node对应数据中的每一行数据,label对应数据库中的字段名,value对应其值。
四、本申请技术方案的详细阐述〔发明内容,重点介绍〕
1、本申请的总体技术实现〔主要是代码方面的实现〕。
〔总的构思〕
流程图:
因为这里是针对已经脱敏的List<
数据进展文件格式的输出,这里就不做脱敏的实现,只做文件输出的实现。
后文中会用到一个公共的Document对象转String的方法:
publicstaticStringdoctoString(Documentdocument){
Stringstr="
"
;
try{
//使用输出流来进展转化
ByteArrayOutputStreamout=newByteArrayOutputStream();
//使用UTF-8编码
OutputFormatformat=newOutputFormat("
"
true,"
UTF-8"
);
XMLWriterwriter=newXMLWriter(out,format);
writer.write(document);
str=out.toString("
}catch(Exceptionex){
ex.printStackTrace();
}
returnstr;
}
1.List<
转xml文件格式的实现〔前文已经写出了xml文件格式的根本,下文就不在做详细的赘述了〕:
引用的包:
org.dom4j。
根据xml文件的根本格式看出,在做具体实现的时候,我是把list里面的数据放在nodes标签里面的,其子标签node如此对应数据库里面的每一行数据,数据库对应的字段名如此是key标签里面的label属性。
这里的重点就是找出最简单的方法将数据库里面的字段名写入到label里面,在这里我们只需要遍历list[0]中的数据就能得出数据库中的字段名了,实现代码如下:
publicstaticStringlisttoXml(Listlist)throwsException{
//初始化一个document对象,用来添加XML内容
Documentdocument=DocumentHelper.createDocument();
//初始化一个Element对象,其表示XML文档中的元素,元素可包含属性,其他元素或文本,如果元素含有文本,如此在文本节点中表示该文本,文本永远存储在文本节点中。
此时创建了一个父节点nodes,用于记录list里面的所有数据。
ElementnodesElement=document.addElement("
nodes"
inti=0;
//遍历list
for(Objecto:
list){
//初始化Element对象,创建nodes节点的子节点node,用于记录每一行数据。
ElementnodeElement=nodesElement.addElement("
node"
if(oinstanceofMap){
//遍历map
for(Objectobj:
((Map)o).keySet()){
//初始化Element对象,创建node节点的子节点key,用于记录每一格的具体数据。
ElementkeyElement=nodeElement.addElement("
key"
//key节点的label属性,即map的健,对应数据库的字段名。
keyElement.addAttribute("
label"
String.valueOf(obj));
//key节点的具体内容,即map的值,对应数据库的值。
keyElement.setText(String.valueOf(((Map)o).get(obj)));
}else{
String.valueOf(i));
keyElement.setText(String.valueOf(o));
i++;
//将Document对象转为字符串返回,在转字符串的时候设定了具体的编码,xml为UTF8的编码。
returndoctoString(document);
到此就将一个List<
转换为了xml文件的格式了,这个list就是数据脱敏网关中的脱敏数据,余下的操作就是将上面返回的字符串输出到文件中,文件的输出就是一个简单的I/O操作就不再做详细的赘述了,值得注意的是在创建文件的时候是以xml为后缀的。
2.List<
转excel文件格式的实现〔区别excel07版以前和以后两个版本〕:
07版本以前的每一个工作簿〔sheet〕数据量限制为256列*65536行,07版本以后的限制为16384列*1048576行,在这里可以看出07版本的excel文件存储的数据量远远大于较早版本的,所以建议尽量使用07版本以后的.不过考虑到很多PC上面可能没有较新的excel我会给出两个版本的具体实现。
而且两个版本的excel在文件后缀名上也存在不同,07版本以前为.xls,07版本以后为.xlsx,在创建文件的时候需要值得注意。
07版本以前引用的包:
org.apache.poi.hssf.usermodel。
/**
*创建excel表头
*paramsheet
*paramkeysStr
*/
privatestaticvoidbuildTitleOld(HSSFSheetsheet,String[]keysStr){
if(sheet.getLastRowNum()==0){
HSSFCellcell=null;
HSSFRowrow=sheet.createRow(sheet.getLastRowNum());
for(intj=0;
j<
keysStr.length;
j++){
cell=row.createCell(j);
cell.setCellValue(keysStr[j]);
*excel版本2007以下sheet上限65535
*paramList<
*return
*/
publicstaticHSSFWorkbooklisttoExcleOld(List<
list){
HSSFWorkbookworkbook=newHSSFWorkbook();
//获取数据库中的字段名。
String[]keysStr=list.get(0).keySet()
.toArray(newString[]{});
HSSFSheetsheet=workbook.getSheetAt(workbook
.getNumberOfSheets()-1);
HSSFRowrow=null;
introwNum=sheet.getLastRowNum();
buildTitleOld(sheet,keysStr);
for(inti=0;
i<
list.size();
i++){
if(rowNum>
65535){
sheet=workbook.createSheet();
rowNum=0;
row=sheet.createRow(++rowNum);
Stringkey=keysStr[j];
Objectobj=list.get(i).get(key);
if(obj!
=null){
str=obj.toString();
cell.setCellValue(str);
row=null;
cell=null;
returnworkbook;
org.apache.poi.xssf.usermodel。
privatestaticvoidbuildTitleNew(XSSFSheetsheet,String[]keysStr){
XSSFCellcell=null;
XSSFRowrow=sheet.createRow(sheet.getLastRowNum());
*listtoexcel版本2007以上sheet行数上线100万+
publicstaticXSSFWorkbooklisttoExcleNew(List<
XSSFWorkbookworkbook=newXSSFWorkbook();
XSSFSheetsheet=workbook.getSheetAt(workbook
XSSFRowrow=null;
buildTitleNew(sheet,keysStr);
1048575){
以上就是两种excel文件格式的具体实现。
07版以后的扩展名都是.xlsx,是用新的基于XML的压缩文件格式取代了其目前专有的默认文件格式,在传统的文件名扩展名后面添加了字母x〔即.docx取代.doc、.xlsx取代.xls,等等〕,使其占用空间更小,可以向下兼容xls。
在做I/O输出的时候需要区别两个版本的excel文件,并修改对应的后缀名。
3.文件〔excel文件.xls或者其对应的zip包〕导入到数据库:
在文件导入数据库的时候这里考虑了两X情况,数据表建表与否。
情况一,数据库表已经建好,且表名对应文件名,字段名对应文件表头,就可以实现文件的直接导入,流程图如下:
这里就不再详细的贴出相关代码,说明几个值得注意的地方:
1.在写入数据之前,需要读取数据库中对应表的字段名,作为全局变量使用,以便匹配list里面对应的数据;
2.如果是ZIP包,里面可能存在多个文件的情况,在处理多个文件的时候,需要对文件进展遍历并且和数据库里面的数据表一一对应,对没有建表的文件抛出异常,其余文件正常导入。
情况二,数据库未建表,但是上传的文件为ZIP包,且里面包含了一个SQL文件夹,流程图如下:
在执行SQL文件的时候,sql语句必须符合语法规如此,要不然会导致建表失败,可以批量的进展建表操作和文件的导入,目前支持informix数据库和oracle数据表。
在处理所有数据的时候都是采用批处理,在一定程度上提高了数据的处理速度。
以下是一些比拟重要的方法实现:
*获取数据表的字段信息
publicstaticMap<
String,Integer>
getTableInfo(Connectionconn,StringtableName){
colInfo=newHashMap<
();
Stringsimpleselect="
select*from"
+tableName;
ResultSetrs;
try{
rs=conn.prepareStatement(simpleselect).executeQuery();
ResultSetMetaDatadbMeta=rs.getMetaData();
for(inti=1;
=dbMeta.getColumnCount();
if("
ROWNUM"
.equals(dbMeta.getColumnName(i)))
continue;
//保存列名和code
StringcolName=dbMeta.getColumnName(i).toLowerCase();
intjavacode=dbMeta.getColumnType(i);
colInfo.put(colName,javacode);
}catch(SQLExceptione){
e.printStackTrace();
ImportWorker.err="
查询数据表信息异常"
returncolInfo;
2、本申请的具体实施例
〔将上述总体技术方案放到一个具体的应用环境下举例说明,注明实施例1、实施例2等。
建议至少2个以上的实施例。
〕
在XX市商业银行的信息系统中部署了数据脱敏网关,对他们的敏感数据进展脱敏操作,为了方便客户的使用,他们提出了从DB2数据库脱敏生成文件的需求。
在这里实现了DB2数据库数据到excel文件。
数据量在1000W左右,导出时间在20分钟左右,效率上来说还需要进一步的提高。
在同一时间,客户提供了一个数据量比拟小的excel文件,我们将其经过脱敏操作后导入到了informix数据库中,耗时不到1分钟。
五、本申请的技术效果〔阐述本发明相对现有技术能够产生何种有益效果〕
例如:
可以节约本钱、加快处理速度、处理更加稳定、运算更加精准……
1.功能扩展:
针对目前的数据脱敏网关中的数据迁移功能进展相关的扩展,保证了功能的多样性和实用性,很大程度上提高了用户的体验度。
2.处理稳定:
通过Java代码实现文件的导出和导入功能比通过工具来导出导入处理更加稳定,确保了数据的完整性;
3.处理速度更快:
在实现文件的导出和导入功能的时候均采用了多线程的实现,可以同事执行多个任务和多个文件,大大的加快了数据迁移的处理速度。
4.节约本钱:
通过数据脱敏网关进展文件的导出和导入,不再需要其他的数据库工具,在某种程度上降低了生产本钱。
六、针对第四项所阐述的技术方案,是否还有别的替代方案同样能完成发明目的
说明:
如果有,请尽量写明,内容的提供可以扩大专利的保护X围,防止他人绕过本技术去实现同样的发明目的;
所述替代可以是局部结构、器件、方法步骤的替代,也可以是完整的技术方案。
文件导入到数据,现在各大数据库连接工具,比如navicat,dbvis等都已实现了其功能,只是需要在建表的情况下才行,而且未实现敏感数据的脱敏工作。
七、引证资料说明
〔完本钱技术交底书前,发明人已经掌握的技术资料,例如在构思本专利中所查阅的相关资料,包括专利、论文〕
填写说明:
此处仅列明标题和出处,资料全文以电子附件形式提供。
提供该资料明确发明人已经投入了一定的智力劳动,有助于提高内部审查效率。
无。