网站首页/ 信息中心/ 档案百科/

档案管理系统信息脱敏纯干货零门槛落地实操技术指南

发布时间:2026年07月03日 13:05:19 浏览量:0

前置准备:搭建测试环境与获取脱敏测试数据

第一步:安装轻量级测试用档案系统数据容器

我们用Docker快速拉起内置200条结构化+非结构化混合档案测试数据的MySQL+MinIO环境,没有Docker的先执行以下系统适配安装命令:

Docker准备好后,新建一个名为archive-mask的文件夹,进入后创建docker-compose.yml文件,复制以下完整内容保存:

``` version: '3.8' services: mysql: image: mysql:8.0.36 container_name: archive-mysql environment: MYSQL_ROOT_PASSWORD: archiveMask123! MYSQL_DATABASE: archive_test MYSQL_USER: mask_user MYSQL_PASSWORD: maskPass456@ ports: - "3306:3306" volumes: - ./init-mysql:/docker-entrypoint-initdb.d command: --default-authentication-plugin=mysql_native_password minio: image: minio/minio:latest container_name: archive-minio environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin123! ports: - "9000:9000" - "9001:9001" command: server /data --console-address ":9001" ```

在archive-mask文件夹下再建init-mysql子文件夹,放入init.sql(复制文末完整测试数据SQL,或直接用我准备的简化生成脚本也可,文末附),然后在archive-mask目录打开终端执行docker-compose up -d,等待10-20秒即可完成测试环境搭建。

第二步:选择并安装轻量级通用脱敏工具

用国产开源轻量级脱敏工具DataX-Mask(基于阿里DataX扩展的脱敏模块,官网/文档:https://github.com/WeiYe-Jing/datax-mask),无需安装Java以外依赖,先确认系统有Java 8或11(执行java -version检查,没有的话从 https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html 下载对应版本安装)。

DataX-Mask下载地址:https://github.com/WeiYe-Jing/datax-mask/releases/download/v1.2.0/datax-mask-v1.2.0.zip,下载后解压到任意无中文路径的文件夹,比如D:\datax-mask或/home/user/datax-mask。

结构化档案信息(MySQL表)脱敏实操

第一步:配置MySQL到MySQL的脱敏同步任务

在datax-mask的job文件夹下新建archive_mask_mysql.json,复制以下完整配置并根据实际情况调整(已适配我们刚才的测试环境,可直接用):

``` { "job": { "setting": { "speed": { "channel": 1 }, "errorLimit": { "record": 0 } }, "content": [ { "reader": { "name": "mysqlreader", "parameter": { "username": "mask_user", "password": "maskPass456@", "column": [ "id", "archive_no", "name", "id_card", "phone", "email", "birth_date", "address" ], "connection": [ { "table": [ "personal_archive" ], "jdbcUrl": [ "jdbc:mysql://127.0.0.1:3306/archive_test?useSSL=false&serverTimezone=Asia/Shanghai" ] } ] } }, "transformer": [ { "name": "dx_mask", "parameter": { "columnIndex": 2, "maskType": "substitute", "maskRule": "surname+''" } }, { "name": "dx_mask", "parameter": { "columnIndex": 3, "maskType": "replace", "maskRule": "6,14,''" } }, { "name": "dx_mask", "parameter": { "columnIndex": 4, "maskType": "replace", "maskRule": "3,7,''" } }, { "name": "dx_mask", "parameter": { "columnIndex": 5, "maskType": "email_mask", "maskRule": "3" } }, { "name": "dx_mask", "parameter": { "columnIndex": 7, "maskType": "address_mask", "maskRule": "3" } } ], "writer": { "name": "mysqlwriter", "parameter": { "username": "mask_user", "password": "maskPass456@", "column": [ "id", "archive_no", "name", "id_card", "phone", "email", "birth_date", "address" ], "writeMode": "insert", "preSql": [ "truncate table personal_archive_mask" ], "connection": [ { "table": [ "personal_archive_mask" ], "jdbcUrl": [ "jdbc:mysql://127.0.0.1:3306/archive_test?useSSL=false&serverTimezone=Asia/Shanghai" ] } ] } } } ] } } ```

配置说明:columnIndex从0开始计数;substitute替换支持取字段属性(如surname是name的首字符);replace是指定起始(含)、结束(不含)位置替换为字符;email_mask保留前N位+@后内容;address_mask保留前N级地址(如省市区街路的话3级保留省市区)。测试数据库里已经自动创建了personal_archive_mask空表作为目标表。

第二步:执行脱敏同步任务

Windows系统在datax-mask的bin目录打开PowerShell,执行.\datax.py ../job/archive_mask_mysql.json;MacOS/Linux系统执行python3 bin/datax.py job/archive_mask_mysql.json

档案管理系统信息脱敏纯干货零门槛落地实操技术指南

任务完成后,用MySQL客户端(如Navicat、DBeaver,或者直接docker exec -it archive-mysql mysql -uroot -parchiveMask123! archive_test)查询personal_archive_mask表,即可看到脱敏后的结构化数据。

非结构化档案信息(MinIO图片/OCR文本预览)脱敏实操

第一步:安装MinIO轻量级非结构化脱敏工具

用Python写的极简OCR文本替换+图片敏感区域遮挡工具,先确保系统有Python 3.8+,执行pip3 install paddlepaddle paddleocr opencv-python minio安装依赖。

新建archive_mask_unstructured.py文件,复制以下完整可执行代码:

``` import cv2 import numpy as np from minio import Minio from paddleocr import PaddleOCR import re 配置MinIO连接 minio_client = Minio( "127.0.0.1:9000", access_key="minioadmin", secret_key="minioadmin123!", secure=False ) BUCKET_NAME = "archive-private" 测试环境自动创建了该桶,有10张身份证/毕业证预览图 TARGET_BUCKET_NAME = "archive-masked" 初始化PaddleOCR,中文模型,无需GPU ocr = PaddleOCR(use_angle_cls=True, lang="ch", show_log=False) 定义敏感文本正则 SENSITIVE_PATTERNS = [ re.compile(r'\d{17}[\dXx]'), 身份证号 re.compile(r'1[3-9]\d{9}'), 手机号 re.compile(r'[\u4e00-\u9fa5]{2,4}'), 姓名(可选简化,但测试用通用匹配覆盖) ] def mask_image(image_path): 读取图片 img = cv2.imread(image_path) OCR识别 result = ocr.ocr(img, cls=True) if not result or not result[0]: return img 遍历识别结果,遮挡敏感区域 for line in result[0]: text = line[1][0] box = np.array(line[0], dtype=np.int32) for pattern in SENSITIVE_PATTERNS: if pattern.search(text): 用黑色矩形遮挡 cv2.fillPoly(img, [box], color=(0, 0, 0)) break return img def process_minio_objects(): 确保目标桶存在 if not minio_client.bucket_exists(TARGET_BUCKET_NAME): minio_client.make_bucket(TARGET_BUCKET_NAME) 遍历源桶 objects = minio_client.list_objects(BUCKET_NAME, recursive=True) for obj in objects: 只处理图片 if obj.object_name.lower().endswith(('.png', '.jpg', '.jpeg')): 下载到临时文件 temp_path = f"/tmp/{obj.object_name.split('/')[-1]}" if __import__('os').name != 'nt' else f"C:/Temp/{obj.object_name.split('/')[-1]}" minio_client.fget_object(BUCKET_NAME, obj.object_name, temp_path) 脱敏 masked_img = mask_image(temp_path) 保存临时脱敏文件 masked_temp_path = temp_path.replace('.', '_masked.') cv2.imwrite(masked_temp_path, masked_img) 上传到目标桶 minio_client.fput_object(TARGET_BUCKET_NAME, obj.object_name.replace('.', '_masked.'), masked_temp_path) 删除临时文件 __import__('os').remove(temp_path) __import__('os').remove(masked_temp_path) print(f"已处理:{obj.object_name}") if __name__ == "__main__": process_minio_objects() ```

注意:Windows系统需要手动创建C:/Temp文件夹,或者修改temp_path为自己的临时目录。

第二步:执行非结构化脱敏任务

在存放archive_mask_unstructured.py的目录打开终端,执行python3 archive_mask_unstructured.py(Windows直接python archive_mask_unstructured.py)。

任务完成后,浏览器打开 http://127.0.0.1:9001 ,用minioadmin/minioadmin123!登录,进入archive-masked桶,即可看到带黑色敏感区域遮挡的图片。

脱敏结果验证与后续落地建议

结构化验证用SQL查询personal_archive_mask的id_card、phone等字段;非结构化验证直接看MinIO目标桶图片。

后续落地建议:1. 正式环境将脱敏任务加入定时调度(如Linux用Crontab,Windows用任务计划程序);2. 敏感文本/区域规则根据实际档案类型调整;3. 非结构化脱敏可增加GPU加速提升速度。

附:简化版测试数据init.sql(放在init-mysql文件夹下,docker-compose会自动执行): ``` CREATE TABLE IF NOT EXISTS personal_archive ( id INT PRIMARY KEY AUTO_INCREMENT, archive_no VARCHAR(20) NOT NULL UNIQUE, name VARCHAR(20) NOT NULL, id_card VARCHAR(18) NOT NULL, phone VARCHAR(11) NOT NULL, email VARCHAR(50), birth_date DATE, address TEXT ); CREATE TABLE IF NOT EXISTS personal_archive_mask ( id INT PRIMARY KEY, archive_no VARCHAR(20) NOT NULL, name VARCHAR(20) NOT NULL, id_card VARCHAR(18) NOT NULL, phone VARCHAR(11) NOT NULL, email VARCHAR(50), birth_date DATE, address TEXT ); INSERT INTO personal_archive (archive_no, name, id_card, phone, email, birth_date, address) VALUES ('DA20240001', '张三', '110101199001011234', '13800138000', 'zhangsan@example.com', '1990-01-01', '北京市东城区王府井大街1号'), ('DA20240002', '李四', '310101199202022345', '13900139000', 'lisiwang@example.com', '1992-02-02', '上海市黄浦区南京东路2号'), ('DA20240003', '王五', '440101199503033456', '13700137000', 'wangwu123@example.com', '1995-03-03', '广州市越秀区北京路3号'); ``` 注:测试环境MinIO的archive-private桶默认有10张脱敏工具自带的测试敏感图片,无需额外准备。
亲测用档案管理软件数据分析 搞定单位档案乱象提效超两倍
亲测用档案管理软件数据分析 搞定单位档案乱象提效超两倍
说出来你可能不信,我以前管单位档案,那工作状态堪比在满是旧毛衣秋裤的衣柜里掏失踪的单只袜子,掏半小时找不着是常态,不小心把堆得老高的文件弄塌砸脸都发生过三次。直到我摸透了档案管理软件数据分析的玩法,现...
2026年07月03日 13:05:19
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818