Skip to content

Repository files navigation

数据脱敏工具

数据脱敏工具是一个本地数据脱敏应用。它支持 MySQL、PostgreSQL、SQL Server 和 Excel 文件等数据源,提供浏览器/桌面界面,用于查看字段和数据、选择字段并配置脱敏规则,最后通过预览和确认流程执行脱敏。

功能简介

  • 输入 MySQL、PostgreSQL 或 SQL Server 连接信息并测试连接。
  • 浏览当前数据库中的表、字段和分页数据。
  • 导入 .xlsx.xls.csv 文件,选择工作表、表头行、字段和分页数据。
  • 选择字段并配置脱敏规则。
  • 生成脱敏预览,查看预计影响行数和样例对比。
  • 二次确认后在事务中更新源表。
  • Excel 脱敏不覆盖原文件,会生成新的 .xlsx 文件。
  • 执行脱敏时显示处理中、成功或失败提示。
  • 连接配置保存在浏览器或 Electron 窗口的 localStorage 中,方便下次打开继续使用。

脱敏规则

当前内置规则包括:

  • 手机号:保留前 3 位和后 4 位。
  • 邮箱:保留用户名前 2 位,域名不变。
  • 身份证:保留前 6 位和后 4 位。
  • 姓名:保留姓,其余替换为 *
  • 地址:保留前 6 个字符。
  • 银行卡:保留前 6 位和后 6 位。
  • 固定替换:统一替换为用户输入的固定值。
  • 置空:更新为 NULL,仅允许可空字段。
  • 哈希:使用 SHA-256 生成不可逆值。

技术栈

  • 前端:Vite、React、TypeScript、Lucide React。
  • 后端:Node.js、TypeScript、Express、mysql2/promisepgmssqlxlsxmulter
  • 桌面端:Electron。
  • 打包:electron-builder,Windows x64 zip portable。
  • 测试:Vitest。

项目结构

.
├─ build/                 # 打包图标等构建资源
├─ electron/              # Electron 主进程和 preload
├─ scripts/               # 构建和打包脚本
├─ server/                # Express 服务、数据库/Excel 访问、脱敏逻辑和测试
├─ shared/                # 前后端共享类型
├─ src/                   # React 前端
├─ index.html
├─ logo.ico
├─ package.json
├─ package-lock.json
├─ tsconfig.json
└─ vite.config.ts

环境要求

  • Node.js 20 或更高版本。
  • npm。
  • 可访问的 MySQL、PostgreSQL、SQL Server 数据库,或本地 Excel/CSV 文件。
  • Windows 打包建议在 Windows 环境执行。

安装依赖

首次拉取或复制项目后,在项目根目录执行:

npm install

项目不需要提交或复制 node_modules/。另一台电脑只要保留源码、配置文件和 package-lock.json,执行 npm install 即可恢复依赖。

本地调试

启动前端和后端开发服务:

npm run dev

该命令会同时启动:

  • npm run server:dev:监听并运行 Express API。
  • npm run client:dev:启动 Vite 前端服务。

也可以分别启动:

npm run server:dev
npm run client:dev

只启动后端服务:

npm start

运行单元测试:

npm test

数据库使用方法

  1. 执行 npm run dev,打开终端中显示的前端地址。
  2. 选择“数据库”模式。
  3. 选择数据库类型,并输入 host、port、user、password 和 database。
  4. 点击连接,连接成功后选择 Schema。
  5. 左侧选择表,中间查看字段,右侧查看分页数据。
  6. 勾选需要脱敏的字段,并为每个字段选择规则。
  7. 点击生成预览,检查影响行数和原始/脱敏后样例。
  8. 确认无误后点击更新源表,并在二次确认弹窗中确认执行。

默认端口:MySQL 3306,PostgreSQL 5432,SQL Server 1433。SQL Server 首版使用 mssql 默认的 tedious 驱动,连接配置默认适配本地/内网环境。DB2 暂不支持,计划作为二期能力;DB2 通常依赖 IBM CLI Driver/ODBC 环境,portable 打包复杂度更高。

注意:数据库模式当前默认对选中字段做整表更新,不支持 WHERE 条件过滤。执行前请仔细检查预览结果,必要时先自行备份数据库。

Excel 使用方法

  1. 执行 npm run dev,打开终端中显示的前端地址。
  2. 选择“Excel”模式。
  3. 上传 .xlsx.xls.csv 文件。
  4. 选择需要处理的工作表。
  5. 默认使用第 1 行作为表头;如果检测到首行存在合并单元格,界面会提示指定表头行。
  6. 查看字段和分页数据,勾选需要脱敏的字段并配置规则。
  7. 点击生成预览,检查影响行数和样例对比。
  8. 确认无误后点击导出文件,生成 {原文件名}_masked.xlsx

注意:Excel 模式首版只处理当前选择的单个工作表,其他工作表会随导出文件保留。复杂样式、公式宏或高级对象不保证完整保真,重点保证单元格数据脱敏结果正确。

后端接口

主要接口如下:

  • POST /api/connections/test:测试连接并创建当前内存会话。
  • POST /api/connections/schema:切换当前数据库 Schema。
  • GET /api/schema/tables:读取当前数据库表列表。
  • GET /api/schema/tables/:table/columns:读取字段、类型、主键、是否可空等信息。
  • GET /api/data/:table?page=&pageSize=:分页读取表数据。
  • POST /api/masking/preview:生成脱敏预览。
  • POST /api/masking/apply:确认后执行脱敏更新。
  • POST /api/excel/import:上传 Excel/CSV 文件并创建当前内存会话。
  • GET /api/excel/sheets:读取当前 Excel 会话和工作表状态。
  • POST /api/excel/select-sheet:选择工作表并确认表头行。
  • GET /api/excel/data?page=&pageSize=:分页读取当前工作表数据。
  • POST /api/excel/masking/preview:生成 Excel 脱敏预览。
  • POST /api/excel/masking/export:确认后导出脱敏后的 .xlsx 文件。

安全与实现要点

  • 后端使用 mysql2/promisepgmssql 分别连接 MySQL、PostgreSQL、SQL Server。
  • 表名和字段名会按数据库方言进行标识符转义处理。
  • 数据值使用参数化 SQL,避免拼接用户输入值。
  • 脱敏执行在事务中完成,失败时回滚。
  • 不允许直接脱敏主键字段。
  • 置空规则只允许应用到可空字段。
  • 服务日志只记录执行摘要,不记录密码和完整原始敏感数据。
  • 数据库连接会话和当前 Schema 保存在本地服务内存中;连接表单保存在前端 localStorage
  • Excel 文件在当前本地服务内存会话中处理,导入新文件会替换旧的 Excel 会话。
  • Excel 预览优先显示选中字段中存在非空值的数据行。

构建

构建前端、后端和 Electron 主进程:

npm run build

单独构建前端:

npm run build:client

单独构建 Electron/后端产物:

npm run build:electron

构建后会生成:

  • dist/:Vite 前端静态产物。
  • dist-electron/:Electron 和服务端打包产物。

这些目录是构建产物,不需要提交。

打包 portable

生成 Windows x64 portable zip:

npm run dist:portable

产物输出到 release/ 目录,文件名类似:

数据脱敏工具-1.0.0-portable.zip

解压后运行其中的 数据脱敏工具.exe 即可启动桌面应用。Electron 主进程会启动内置 Express 服务,并加载本地页面。

图标

项目使用 logo.ico 作为应用图标资源,electron-builder 的 Windows 图标配置为:

build/icon.ico

如果替换图标,请同时确保 build/icon.ico 存在并为有效 .ico 文件。

清理说明

以下目录或文件为依赖、构建产物或日志,不需要保留:

  • node_modules/
  • dist/
  • dist-electron/
  • release/
  • *.log

.gitignore 已配置忽略这些内容。

About

数据脱敏工具

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages