利用otter做mysql資料實時脫敏
java程式碼:
package com.alibaba.otter; import java.util.Objects; import org.apache.commons.lang.StringUtils; import com.alibaba.otter.node.extend.processor.AbstractEventProcessor; import com.alibaba.otter.shared.etl.model.EventColumn; import com.alibaba.otter.shared.etl.model.EventData; import com.alibaba.otter.shared.etl.model.EventType; public class TransferProcessor extends AbstractEventProcessor{ public boolean process(EventData eventData) { String eventType = eventData.getEventType().getValue(); if(eventType.equals(EventType.QUERY.getValue())) { return true; } ColumnInfoEnum[] values = ColumnInfoEnum.values(); for(ColumnInfoEnum cie : values) { EventColumn column = getColumn(eventData, cie.getColumnKey()); if(Objects.nonNull(column)) { if(StringUtils.isNotBlank(column.getColumnValue())) { column.setColumnValue(replace(column.getColumnValue(), cie.getPrefixLength(), cie.getSubffixLength())); } } } return true; } public static void main(String[] args) { System.out.println(replace("內蒙古呼和浩特市巴林右旗罕吐柏 村6組", 6, 0)); } private static String replace(String sourceValue,int prefixLength, int subffixLength) { sourceValue = sourceValue.trim(); if(StringUtils.isBlank(sourceValue)) { return ""; } int length = sourceValue.length(); if(length < (prefixLength + subffixLength)) { return ""; } sourceValue = sourceValue.replaceAll("(\\s)", "*"); System.out.println(sourceValue); int placeHolderLenth = length - prefixLength - subffixLength; String pattern = "(\\S{"+(prefixLength)+"})\\S{"+placeHolderLenth+"}(\\S{"+subffixLength+"})"; StringBuilder placeHolder = new StringBuilder("$1"); for(int i = 0; i < placeHolderLenth; i ++) { placeHolder.append("*"); } placeHolder.append("$2"); return sourceValue.replaceAll(pattern, placeHolder.toString()); } enum ColumnInfoEnum { NAME("name",1,0), BIRTHDAY("birthday",4,0), ID_NUM("id_num",6,2), SELFPHONE("selfphone",3,4), FAMILYPHONE("familyphone",3,4); ColumnInfoEnum(String columnKey, int prefixLength, int subffixLength) { this.columnKey = columnKey; this.prefixLength = prefixLength; this.subffixLength = subffixLength; } private String columnKey; private int prefixLength; private int subffixLength; public String getColumnKey() { return columnKey; } public int getPrefixLength() { return prefixLength; } public int getSubffixLength() { return subffixLength; } } }
最終效果:
mysql> select name,birthday,id_num,familyphone ,selfphone from patient where familyphone is not null limit 10 -> ; +-------+----------+-------------------------------+---------------+--------------+ | name | birthday | id_num | familyphone | selfphone | +-------+----------+-------------------------------+---------------+--------------+ | 測** | 1980** | jshhsh*****sh | 148*****4774 | 137*****9944 | | 何** | 1988** | 320908*****61 | 139*****5632 | 139*****5632 | | 大** | 1983** | 偷摸咯了了啃*****咳咳 | ¥89*****6699 | 135*****4578 | | 預** | 1974** | hdhdhd*****dd | 136*****4646 | 134*****4646 | | 好** | 1978** | hk3562*****66 | 135*****5555 | 132*****5555 | | 預** | 1978** | 646464*****46 | 135*****7855 | 135*****5555 | | 我** | 1980** | 還不行八點半*****點半 | 139*****6464 | 135*****4664 | | 李** | 2017** | NULL | 199*****4372 | NULL | | 韓** | 1965** | 640122*****38 | 151*****3918 | 150*****9975 | | 德** | 2008** | NULL | 177*****4400 | NULL | +-------+----------+-------------------------------+---------------+--------------+
注意:用這個脫敏功能,一定要配置JAVA_HOME變數,如下:
cat .bash_profile JAVA_HOME=/usr/lib/jvm/java-1.8.0 CLASS_PATH=.:$JAVA_HOME/lib export JAVA_HOME export CLASS_PATH
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28916011/viewspace-2749425/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料脫敏
- 利用Jackson序列化實現資料脫敏
- 動態脫敏典型應用場景分析——業務脫敏、運維脫敏、資料交換脫敏運維
- Laravel 資料庫脫敏工具,僅支援 MySQLLaravel資料庫MySql
- java怎麼實現資料脫敏Java
- 利用otter對敏感資料加密加密
- mysql簡單脫敏MySql
- 資料庫動態脫敏資料庫
- 資料庫靜態脫敏資料庫
- ETL的資料脫敏方式
- 部署otter實現mysql主備資料同步(上)MySql
- 部署otter實現mysql主備資料同步(下)MySql
- 聊聊如何自定義資料脫敏
- 資料脫敏 t-closeness介紹與實現
- MyBatis攔截器優雅實現資料脫敏MyBatis
- 資料脫敏大資料架構設計大資料架構
- SpringBoot實戰:輕鬆實現介面資料脫敏Spring Boot
- 工作常備:自定義註解實現資料脫敏
- 通過Vue的過濾器實現資料的資料脫敏Vue過濾器
- openGauss 動態資料脫敏機制
- 自定義註解進行資料脫敏
- 《資料安全能力成熟度模型》實踐指南10:資料脫敏模型
- 案例解析|“脫敏+加密”保障安徽高速資料安全加密
- 數倉安全:資料脫敏技術深度解析
- openGauss-動態資料脫敏機制
- 實踐 | 大型基金管理公司資料脫敏體系建設
- 資料脫敏:姓名、電話號碼等進行欄位脫敏,中間部分顯示成**
- SNP乾貨分享:SAP資料脫敏的具體實施步驟
- SpringBoot進階教程(七十五)資料脫敏Spring Boot
- springboot 結合jackson資料脫敏Spring Boot
- 萬字詳解資料安全關鍵技術之資料脫敏
- oracle通過expdp的remap_data實現簡單的資料脫敏OracleREM
- oracle透過expdp的remap_data實現簡單的資料脫敏OracleREM
- java 日誌脫敏框架 sensitive,優雅的列印脫敏日誌Java框架
- 新品釋出 | 綠盟資料脫敏系統DMS助力守護資料安全
- 構建並實現資料抽取、轉換、清洗、脫敏、載入等功能。
- 【otter】otter安裝
- 企業如何遵守資料安全法規進行SAP資料脫敏處理?