数据脱敏工具是一个本地数据脱敏应用。它支持 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/promise、pg、mssql、xlsx、multer。 - 桌面端: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- 执行
npm run dev,打开终端中显示的前端地址。 - 选择“数据库”模式。
- 选择数据库类型,并输入 host、port、user、password 和 database。
- 点击连接,连接成功后选择 Schema。
- 左侧选择表,中间查看字段,右侧查看分页数据。
- 勾选需要脱敏的字段,并为每个字段选择规则。
- 点击生成预览,检查影响行数和原始/脱敏后样例。
- 确认无误后点击更新源表,并在二次确认弹窗中确认执行。
默认端口:MySQL 3306,PostgreSQL 5432,SQL Server 1433。SQL Server 首版使用 mssql 默认的 tedious 驱动,连接配置默认适配本地/内网环境。DB2 暂不支持,计划作为二期能力;DB2 通常依赖 IBM CLI Driver/ODBC 环境,portable 打包复杂度更高。
注意:数据库模式当前默认对选中字段做整表更新,不支持 WHERE 条件过滤。执行前请仔细检查预览结果,必要时先自行备份数据库。
- 执行
npm run dev,打开终端中显示的前端地址。 - 选择“Excel”模式。
- 上传
.xlsx、.xls或.csv文件。 - 选择需要处理的工作表。
- 默认使用第 1 行作为表头;如果检测到首行存在合并单元格,界面会提示指定表头行。
- 查看字段和分页数据,勾选需要脱敏的字段并配置规则。
- 点击生成预览,检查影响行数和样例对比。
- 确认无误后点击导出文件,生成
{原文件名}_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/promise、pg、mssql分别连接 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 和服务端打包产物。
这些目录是构建产物,不需要提交。
生成 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 已配置忽略这些内容。