版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、北京明朝万达科技有限公司 技术交底书(内部资料)我司案号 委托日期 专利类型 技 术 交 底 书(发明或实用新型专利申请专用)技术交底书名称:数据脱敏到文件和文件导入数据库的实现 发明人名单:技术交底书撰写人:吴阳撰写人联系方式:E-mail:wuyang固定电话:手机明人所属项目组: 研发中心-数据管控产品线 本申请涉及的方案是否已在产品上应用(可选):否 是 (产品名称) 本申请涉及的方案是否即将在产品上应用:否 是 (产品名称) (预计的应用时间) 交底书撰写注意事项:1、专利法予以保护的是技术方案不是功能,因此需要给出实现某种功能的具体技术方案,不能仅仅阐述功
2、能;2、为了获得一个较大的保护范围,在能够实现最基本的发明目的的前提条件下,发明人应该在当前实施的最优技术方案基础上发散思维,给出尽可能多的替代方案;3、同一个技术术语在整个交底书里只用一个词来表达,不要用多个词来表达。4、代理人和知识产权专员不是技术专家,当他们咨询时,发明人需要耐心讲解;如果代理人或知识产权专员要求补充必要的资料,发明人应当及时补充。一、缩略语和关键术语定义(下文出现的英文缩写术语在此提供对应的英文全称和中文译文,或中文专业术语的详细解释)敏感数据,指不为大众知悉,具有实际和潜在利用价值,丢失、不当使用或未经授权访问对社会、企业或个人造成危害的信息,如个人隐私信息、业务经营
3、信息、财务信息、人事信息、IT运维信息等。数据脱敏,指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感数据的可靠保护。脱敏数据,指敏感数据经过数据脱敏处理后,不再包含某些敏感信息的数据。数据迁移,指将数据从一个载体迁移到另一个载体,比如:从数据库A迁移到数据库B,从文件A迁移到数据库A,从数据库A迁移到文件A等。XML,即可扩展标记语言(Extensible Markup Language)。标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士自由决定的标记语言,
4、这就是语言的可扩展性。XML是从SGML中简化修改出来的。文件的导出,即将源数据库中脱敏后的数据导入到指定格式的文件中。文件的导入,即将excel文件经过脱敏操作过后导入到目标数据库中。二、背景技术以及与本申请相关的现有技术1、背景技术(即帮助理解本专利技术内容的公知常识,您基于什么样的背景发明的该专利):随着信息技术的发展与大数据时代的到来,数据流通成为释放数据红利与价值的主要手段和途径,敏感数据在流通中缺乏有效管控,处于高风险状态。近年来,敏感数据泄漏事件屡见不鲜。敏感数据泄漏带来的不仅仅是经济损失,同时损害了金融机构和政府部门等权威机构的公信力,严重破坏了社会信用体系,影响了相关产业与全
5、社会健康和谐发展。在这样的时代背景下,防止敏感数据的泄漏成为了十分重要的问题,因此我们开发了数据脱敏网关。数据脱敏网关就是针对敏感数据进行数据脱敏,保证数据在做数据迁移的和使用时的安全性和保密性。数据脱敏网关主要实现了敏感数据在数据库之间的脱敏和迁移,针对客户的需求,又加入了数据库到文件(支持的文件格式有csv,excel,json,xml,txt)的脱敏,和文件(暂时只支持07版以前的excel,或者excel压缩打包后的zip包)到数据库的脱敏。2、与本专利最接近的现有技术(现有技术就是已经有的技术,如果该现有技术的缺点正是本发明能够消除的,则为相关现有技术,否则为非相关现有技术;相关现有
6、技术中,与本专利共同的技术特征最多的,可视为最接近现有技术)最接近现有技术是数据脱敏网关中的数据迁移管理模块,实现了数据库之间的脱敏迁移。2.1现有技术的实现方案(给出现有技术的系统图、流程图,结合附图说明现有技术的实现过程)数据迁移管理模块作为数据脱敏网关的核心功能,其下又分为三个子模块: 策略管理,任务管理,任务日志管理,集成在数据脱敏网关中。如下图:策略管理:实现了相关脱敏策略的增删改查操作。任务管理:实现了相关脱敏任务的增删改查操作,改子模块是脱敏迁移管理的核心功能,整个的数据脱敏迁移都是在这里实现,目前实现了数据库到数据的脱敏迁移,数据到csv文件的脱敏迁移。任务日志管理:简单的任务
7、日志查看功能。数据库脱敏迁移流程图2.2现有技术的缺点(一定是采用本专利申请技术方案后能够消除的缺点,缺点可以是多个)现有数据迁移管理模块中,只是针对了数据库之间的脱敏迁移,在文件(excel)方面功能还不够完善,只存在简单的csv文件的导出功能,在遇到客户需要其他文件格式的时候,比如excel,xml,json等文件格式的时候没有良好的支持。 三、本申请所解决的技术问题(针对上述2.2点提出的缺点,引出发明动机,阐述本专利要解决的技术问题)在数据脱敏中,脱敏后的数据存放在一个List<Map<String, Object>>集合中,其中每一个Map都对应数据库里面的一
8、个数据,string为其列名,object为其值。难点在于怎样将数据按照每个文件对应的格式转换写入到文件当中,而且在excel文件存在不同版本的区别,07版以前的excel每一个sheet只支持65535行的数据量,而07版本以后支持100万+行的数据量,map中的健对应excel的表头列名。xml的数据也有固定的格式要求,下文会贴出例子;而json数据在Java里面有现有的方法实现,就不做详细的阐述了。XML数据格式:<nodes><node><key label="key1">value1</key><key lab
9、el="key2">value2</key>.</node><node><key label="key1">value1</key><key label="key2">value2</key>.</node></nodes>备注:每一个node对应数据中的每一行数据,label对应数据库中的字段名,value对应其值。四、本申请技术方案的详细阐述(发明内容,重点介绍)1、本申请的总体技术实现(主要是代码方面的实现)。(总的
10、构思)流程图:备注:因为这里是针对已经脱敏的List<Map<String, Object>>数据进行文件格式的输出,这里就不做脱敏的实现,只做文件输出的实现。后文中会用到一个公共的Document对象转String的方法:public static String doctoString(Document document) String str = "" try / 使用输出流来进行转化 ByteArrayOutputStream out = new ByteArrayOutputStream(); / 使用UTF-8编码 OutputFormat
11、 format = new OutputFormat(" ", true, "UTF-8"); XMLWriter writer = new XMLWriter(out, format); writer.write(document); str = out.toString("UTF-8"); catch (Exception ex) ex.printStackTrace(); return str; 1 List<Map<String, Object>>转xml文件格式的实现(前文已经写出了xml文件格式的基
12、本,下文就不在做详细的赘述了):引用的包:org.dom4j。根据xml文件的基本格式看出,在做具体实现的时候,我是把list里面的数据放在nodes标签里面的,其子标签node则对应数据库里面的每一行数据,数据库对应的字段名则是key标签里面的label属性。这里的重点就是找出最简单的方法将数据库里面的字段名写入到label里面,在这里我们只需要遍历list0中的数据就能得出数据库中的字段名了,实现代码如下: public static String listtoXml(List list) throws Exception /初始化一个document对象,用来添加XML内容Documen
13、t document = DocumentHelper.createDocument();/初始化一个Element对象,其表示XML文档中的元素,元素可包含属性,其他元素或文本,如果元素含有文本,则在文本节点中表示该文本,文本永远存储在文本节点中。 此时创建了一个父节点nodes,用于记录list里面的所有数据。Element nodesElement = document.addElement("nodes"); int i = 0;/遍历list for (Object o : list) /初始化Element对象,创建nodes节点的子节点node,用于记录每一行
14、数据。Element nodeElement = nodesElement.addElement("node"); if (o instanceof Map) /遍历mapfor (Object obj : (Map) o).keySet() /初始化Element对象,创建node节点的子节点key,用于记录每一格的具体数据。Element keyElement = nodeElement.addElement("key"); /key节点的label属性,即map的健,对应数据库的字段名。keyElement.addAttribute("l
15、abel", String.valueOf(obj); /key节点的具体内容,即map的值,对应数据库的值。keyElement.setText(String.valueOf(Map) o).get(obj); else Element keyElement = nodeElement.addElement("key"); keyElement.addAttribute("label", String.valueOf(i); keyElement.setText(String.valueOf(o); i+; /将Document对象转为字符串
16、返回,在转字符串的时候设定了具体的编码,xml为UTF8的编码。 return doctoString(document); 到此就将一个List<Map<String, Object>>转换为了xml文件的格式了,这个list就是数据脱敏网关中的脱敏数据,余下的操作就是将上面返回的字符串输出到文件中,文件的输出就是一个简单的I/O操作就不再做详细的赘述了,值得注意的是在创建文件的时候是以xml为后缀的。2. List<Map<String, Object>>转excel文件格式的实现(区别excel 07版以前和以后两个版本):07版本以前的每
17、一个工作簿(sheet)数据量限制为256列*65536行,07版本以后的限制为16384列*1048576行,在这里可以看出07版本的excel文件存储的数据量远远大于较早版本的,所以建议尽量使用07版本以后的.不过考虑到很多PC上面可能没有较新的excel我会给出两个版本的具体实现。而且两个版本的excel在文件后缀名上也存在不同,07版本以前为.xls,07版本以后为.xlsx,在创建文件的时候需要值得注意。07版本以前引用的包:org.apache.poi.hssf.usermodel。/* *创建excel表头 * param sheet * param keysStr */priv
18、ate static void buildTitleOld(HSSFSheet sheet, String keysStr) if (sheet.getLastRowNum() = 0) HSSFCell cell = null;HSSFRow row = sheet.createRow(sheet.getLastRowNum();for (int j = 0; j < keysStr.length; j+) cell = row.createCell(j);cell.setCellValue(keysStrj);/* excel 版本2007以下 sheet上限65535* param
19、 List<Map<String, Object>>* return*/public static HSSFWorkbook listtoExcleOld(List<Map<String, Object>> list)HSSFWorkbook workbook = new HSSFWorkbook();/获取数据库中的字段名。String keysStr = list.get(0).keySet().toArray(new String );HSSFSheet sheet = workbook.getSheetAt(workbook.getNum
20、berOfSheets() - 1);HSSFRow row = null;HSSFCell cell = null;int rowNum = sheet.getLastRowNum();buildTitleOld(sheet, keysStr);for (int i = 0; i < list.size(); i+) if (rowNum > 65535) sheet = workbook.createSheet();buildTitleOld(sheet, keysStr);rowNum = 0;row = sheet.createRow(+rowNum);for (int j
21、 = 0; j < keysStr.length; j+) cell = row.createCell(j);String key = keysStrj;Object obj = list.get(i).get(key);String str = ""if (obj != null) str = obj.toString();cell.setCellValue(str);row = null;cell = null;return workbook;07版本以前引用的包:org.apache.poi.xssf.usermodel。/* *创建excel表头 * para
22、m sheet * param keysStr */private static void buildTitleNew(XSSFSheet sheet, String keysStr) if (sheet.getLastRowNum() = 0) XSSFCell cell = null;XSSFRow row = sheet.createRow(sheet.getLastRowNum();for (int j = 0; j < keysStr.length; j+) cell = row.createCell(j);cell.setCellValue(keysStrj);/* list
23、 to excel 版本2007以上 sheet行数上线100万+* param List<Map<String, Object>>* return*/public static XSSFWorkbook listtoExcleNew(List<Map<String, Object>> list)XSSFWorkbook workbook = new XSSFWorkbook();String keysStr = list.get(0).keySet().toArray(new String );XSSFSheet sheet = workboo
24、k.getSheetAt(workbook.getNumberOfSheets() - 1);XSSFRow row = null;XSSFCell cell = null;int rowNum = sheet.getLastRowNum();buildTitleNew(sheet, keysStr);for (int i = 0; i < list.size(); i+) if (rowNum > 1048575) sheet = workbook.createSheet();buildTitleNew(sheet, keysStr);rowNum = 0;row = sheet
25、.createRow(+rowNum);for (int j = 0; j < keysStr.length; j+) cell = row.createCell(j);String key = keysStrj;Object obj = list.get(i).get(key);String str = ""if (obj != null) str = obj.toString();cell.setCellValue(str);row = null;cell = null;return workbook;以上就是两种excel文件格式的具体实现。07版以后的扩展名都
26、是.xlsx ,是用新的基于XML的压缩文件格式取代了其目前专有的默认文件格式,在传统的文件名扩展名后面添加了字母x(即.docx取代.doc、.xlsx取代.xls,等等),使其占用空间更小,可以向下兼容xls。在做I/O输出的时候需要区别两个版本的excel文件,并修改对应的后缀名。3. 文件(excel文件.xls或者其对应的zip包)导入到数据库:在文件导入数据库的时候这里考虑了两张情况,数据表建表与否。情况一,数据库表已经建好,且表名对应文件名,字段名对应文件表头,就可以实现文件的直接导入,流程图如下:这里就不再详细的贴出相关代码, 说明几个值得注意的地方:1 在写入数据之前,需要读
27、取数据库中对应表的字段名,作为全局变量使用,以便匹配list里面对应的数据;2 如果是ZIP包,里面可能存在多个文件的情况,在处理多个文件的时候,需要对文件进行遍历并且和数据库里面的数据表一一对应,对没有建表的文件抛出异常,其余文件正常导入。情况二,数据库未建表,但是上传的文件为ZIP包,且里面包含了一个SQL文件夹,流程图如下:在执行SQL文件的时候,sql语句必须符合语法规则,要不然会导致建表失败,可以批量的进行建表操作和文件的导入,目前支持informix数据库和oracle数据表。在处理所有数据的时候都是采用批处理,在一定程度上提高了数据的处理速度。以下是一些比较重要的方法实现:/*获
28、取数据表的字段信息*/public static Map<String, Integer> getTableInfo(Connection conn, String tableName)Map<String, Integer> colInfo = new HashMap<String, Integer>();String simpleselect = "select * from "+tableName;ResultSet rs;try rs = conn.prepareStatement(simpleselect).executeQue
29、ry();ResultSetMetaData dbMeta = rs.getMetaData();for (int i = 1; i <= dbMeta.getColumnCount(); i+) if ("ROWNUM".equals(dbMeta.getColumnName(i)continue;/ 保存列名和codeString colName = dbMeta.getColumnName(i).toLowerCase();int javacode = dbMeta.getColumnType(i);colInfo.put(colName, javacode); catch (SQLException e) e.printStac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024宾馆室内装修合同标准样本
- 2024房屋名额转让协议,房屋名额转让协议范本,写购房名额转让合同
- 2024担保合同格式参考
- 2024家教的劳动合同范本
- 2024软件开发合同标准模板
- 小区车库广告位租赁合同
- 产品临时借用协议
- 建筑业劳动合同:退休政策改革与规范
- 历史文化遗产保护拆迁合同
- 农业项目合作书参考
- GB/T 39633-2020协作机器人用一体式伺服电动机系统通用规范
- FZ/T 01002-2010印染企业综合能耗计算办法及基本定额
- 药品储备评估表
- 国家自然科学基金申请经验汇总课件
- 青春期女孩自尊自爱课件
- 2023年西藏开发投资集团有限公司招聘笔试题库及答案解析
- 小学语文人教三年级上册观察桔子孙娟课件
- 藏族人的名字标准英语翻译
- 市场营销产品组合与产品策略课件
- 医院会计实务操作培训课件
- 《江苏省建筑业10项新技术(2021)》
评论
0/150
提交评论