Navicat 博客

Navicat 18中的数据脱敏:更安全的开发与测试环境 2026 年 8 月 31 日,由 Robert Gravelle 撰写

每个数据库团队最终都会遇到同一个问题:最理想的测试数据就是真实数据,但把真实数据用在生产环境之外,随时可能演变成一场合规噩梦。GDPR、HIPAA 和 PCI-DSS 等法规不会因为你“只是在测试”就网开一面;一旦开发人员的笔记本电脑或预发布服务器泄露了真实的客户姓名、电子邮件或支付信息,就构成了数据泄露事件。Navicat 18 正面解决了这一难题,推出了全新功能“数据脱敏”,可将敏感的生产记录转换为安全且贴近真实的模拟数据,从而让开发、测试与 QA 团队在规避风险的同时持续开展工作。

为什么脱敏优于删除或伪造数据

将敏感列整个剔除,或者用一眼就能看出的假占位符(test1test2xxxxx)来替换它们,往往会破坏你正要测试的业务流程本身,因为依赖真实数据格式、唯一性约束或参照完整性的查询,在垃圾数据上运行时表现可能截然不同。脱敏则解决了这个问题:它在保留数据形态与可用性的同时,去除了任何可能识别出真实个人的信息。

Navicat 18 支持五种行业标准的脱敏技术:

  • 替换:将真实值替换为逼真但虚构的值(例如,用另一个合理可信的姓名替换真实姓名)
  • 偏移:对数值或日期值施加随机偏移量,在保留整体趋势的同时不暴露精确数值
  • 置乱:在列内随机重排各值的顺序,使数据依然是真实数据,但不再与正确的行相对应
  • 散列:将值转换为固定长度的不可逆字符串,适用于需要保持一致性(相同输入始终得到相同的散列结果)、又不希望结果与原始值有任何相似之处的场景
  • 置空:将字段整体清空,最适合那些在生产环境之外完全没有使用场景的数据

选择哪种技术取决于下游测试的实际需求;对于需要参与连接(JOIN)或匹配的值,散列是理想之选;而替换能让 QA 人员在人工查看数据时依然保持良好的可读性。

在 Navicat 18 中执行数据脱敏:快速上手

数据脱敏功能在企业版和标准版中提供,支持 MySQL、Oracle、PostgreSQL、SQLite、SQL Server、MariaDB、MongoDB 和 Snowflake 数据库。下面演示如何将几列真实客户数据转换为安全且逼真的模拟数据:

  • 在主窗口中,从工具栏中选择“工具”->“数据脱敏”。

    data_masking_command (68K)

  • 随后将启动“数据脱敏”向导,引导我们完成整个流程。

    在第一个界面上,我们可以通过将脱敏后的数据传输到另一个数据库(默认选项)来把脱敏应用于工作流程,也可以直接对现有表执行脱敏。这里我们接受默认设置。

    data_masking_dialog_masking_strategy (49K)

  • 接下来要选择源数据库和目标数据库。由于上一步我们选择了将脱敏后的数据传输到另一个数据库,因此这里既可以选择某个数据库,也可以将 SQL 输出到文件。我们选择后者,并将文件命名为“customer_test”。如果希望在多个数据库之间复用同一批测试数据,这是非常合适的选择。

    data_masking_dialog_target (81K)

  • 下一个界面用于选择要脱敏的表与数据行。我们选择 customer 表。(请注意,除 MongoDB 之外的所有数据库,执行数据脱敏时都要求表具有主键。)这里提供两种主要的传输模式:“自动”和“高级”。“自动”模式会脱敏所有行并保持字段名不变;而选择“高级”选项则可以完全掌控目标表名、字段名以及要处理的行。除记录集之外,其余设置我们都保持不变。这里我们要把记录限定为前 10 个 customer_id,具体操作如下:
    • 选择“自定义记录集”(Custom recordsets)选项。此时光标会定位到记录集列表中的一个新的空行。
    • 单击文本框右侧的省略号 [...] 按钮,打开“筛选”对话框。
    • 在对话框中单击 + 号以添加新条件。你一定会觉得很熟悉,因为它的用法与可视化查询创建工具(Visual Query Builder)的 WHERE 子句完全相同。

      filter_dialog (13K)

    • 单击“SQL 预览”按钮即可查看生成的 SQL。

      sql_preview (50K)

    • 下面是填写完成的“数据库对象”界面:

      data_masking_database_objects (160K)
    • 现在选择要脱敏的字段。我们选择 store_id、last_name、email 和 create_date。

      fields_for_data_masking (87K)

    • 下一个界面用于告诉 Navicat 每个字段具体采用何种脱敏方式。下面逐一说明:

      store_id 列

      作为数值字段,store_id 提供了很多脱敏选项。我们为数据脱敏技术选择“置乱”。这会为每一行分配有效的 id,但顺序会发生变化。

      store_id_masking (136K)

      我们可以在界面底部看到输出结果。

      last_name 列

      对于 last_name 字段,我们为数据脱敏技术选择“替换”。此外还有多个类别可供选择,从通用类别到更专门的类别不等。对我们而言,“姓名”类别正合适。

      我们还可以选择保留原始值的一部分并对其余部分脱敏,或者替换为假值。我们选择第一种,这样姓氏中除首字母以外的每个字母都会被星号(*)遮盖。

      last_name_masking (169K)

      email 列

      电子邮件有自己的类别,允许我们分别对用户名部分和域名部分应用不同的脱敏方式。对于域名,Navicat 提供了一份可自定义的候选域名列表。

      email_masking (154K)

      create_date 列

      日期和时间提供了多种脱敏可能性。例如,我们可以将 DateTime 转换为 Date、修改取值,或者用逼真的假数据替换它们。

      create_date_masking (172K)
    • “摘要”界面在开始执行之前提供了最后一次检查脱敏操作的机会。

      summary_screen (117K)

    • Navicat 会完整列出它正在执行的各项操作。

      process_output (80K)

    • 关闭对话框后,我们可以通过“文件”->“打开文件”->“查询...”命令在 Navicat 中查看输出文件。

      customer_test_file (191K)

    由于整个流程都在 Navicat 内部完成,无需将数据导出到单独的工具或脚本——你可以在当前工作的环境中,几分钟内完成整个数据库的脱敏。

    总结

    对于既要满足合规要求、又切实需要逼真测试数据的团队来说,数据脱敏填补了一项真实的空白。结合 Navicat 18 更广泛的 AI 工具集,它把过去依赖人工、容易出错的流程变成了几次点击即可完成的操作。如果你的团队在开发或测试环境中处理受监管的数据,那么升级之后,这个功能绝对值得第一时间试用!

分享
文章归档