2025年9月25日: PostgreSQL 18 发布!

Greenmask v0.2.0b1 发布

发布于 2024-07-01,作者 Greenmask.io
相关开源 安全

Greenmask v0.2.0b1 发布

PostgreSQL 逻辑备份和匿名化工具

这个重要的Beta 版发布引入了新功能和重构的转换器,显著增强了 Greenmask 的灵活性,以更好地满足业务需求。帮助我们改进 GreenMask 并根据社区需求进行定制。我们欢迎您在 GitHub 上的发布讨论区提出您的反馈。

Greenmask 概述

Greenmask 是一款用于数据库备份、匿名化和恢复的多功能开源工具。它使用纯 Go 语言编写,并移植了 PostgreSQL 库,因此具有跨平台性和无状态性,无需修改数据库模式。它可定制,并与现有的 PostgreSQL 工具兼容。

Greenmask 非常适合

  • 常规备份和恢复任务,确保数据完整性和可用性。
  • 用于暂存环境和分析的匿名化和数据脱敏,保护敏感信息同时保持数据可用性。

主要功能

  • 确定性转换器 — 基于哈希函数的确定性数据转换方法。这确保了相同的输入数据将始终产生相同的输出数据。几乎每个转换器都支持 randomhash 引擎,使其适用于任何用例。
  • 动态参数 — 几乎每个转换器都支持动态参数,允许从表列值动态地参数化转换器。这有助于解决列之间的函数依赖关系并满足约束。
  • 数据库类型安全 - 通过验证数据并利用数据库驱动程序进行编码和解码操作来确保数据完整性。这种方法保证了数据格式的保留。
  • 转换验证和易于维护 - 在混淆开发过程中,Greenmask 提供验证警告和转换差异功能,允许您在整个软件生命周期内有效监控和维护转换。
  • 分区表转换继承 - 定义一次转换配置,并将其应用于分区表中的所有分区,从而简化了混淆过程。
  • 无状态 - Greenmask 作为逻辑备份运行,不会影响您现有的数据库模式。
  • 向后兼容 - 它完全支持与现有标准 PostgreSQL 工具相同的功能和协议。Greenmask 创建的备份可以使用 pg_restore 工具成功恢复。
  • 可扩展 - 用户可以灵活地使用任何编程语言实现基于域的转换,或使用预定义的模板。
  • 提供多种存储 - Greenmask 为本地和远程数据存储提供了多种存储选项,包括目录和 S3 类存储解决方案。

Beta 版本的 Playground 使用

如果您想运行 Beta 版本的 Greenmask Playground,请执行

git checkout tags/v0.2.0b1 -b v0.2.0b1 docker-compose run greenmask-from-source

更改概述

  • 在转换器中引入了动态参数
    • 大多数转换器现在都支持适用的动态参数。
    • 动态参数强制执行严格。如果您需要将值转换为另一种类型,Greenmask 提供了模板和可通过 cast_to 访问的预定义转换函数。这些函数涵盖了常见的操作,例如 UnixTimestampToDateIntToBool
  • 转换逻辑已得到显著重构,使得转换器比以前更具可定制性和灵活性。
  • 引入了转换引擎

    • random - 基于伪随机算法生成转换器值。
    • hash - 使用哈希函数生成转换器值。目前,它使用 sha3 哈希函数,该函数安全但性能较低。在稳定版本中,将提供 sha3SipHash 之间的选择选项。
  • 引入了静态参数值模板

重要更改

核心

  • 引入了 Parametrizer 接口,现已为动态参数和静态参数实现。
  • 重命名了大部分工具包类型,以提高清晰度和全面的文档覆盖。
  • 重构了 Driver 初始化逻辑。
  • Driver 中被覆盖的类型添加了验证警告。
  • 将现有的内置转换器迁移到使用新的 Parametrizer 接口。
  • 实现了一个新的抽象 TransformationContext,这是实现新功能转换条件 (#34) 的第一步。
  • 优化了大多数转换器在动态和静态模式下的性能。虽然动态模式提供了灵活性,但静态模式确保了高性能。仅使用必要的转换功能有助于使转换时间保持可预测。

文档

文档已得到显著重构。已添加关于新功能和转换器描述更新的信息。

转换器

  • RandomEmail - 引入了一个新的转换器,支持随机和确定性引擎。它允许灵活地生成电子邮件值;您可以在模板中使用列值,并选择保留原始域或从 domains 参数中选择任何域。

  • NoiseDate, NoiseFloat, NoiseInt - 这些转换器支持随机和确定性引擎,提供控制 minmax 范围内噪声阈值的动态模式参数。与之前使用单个 ratio 参数的实现不同,新版本具有 min_ratiomax_ratio 参数,可以更精确地定义噪声值。在这些转换器中使用 hash 引擎可以提高安全性,因为它可以使攻击者难以进行统计分析,尤其是在长期内始终使用相同的盐时。

  • NoiseNumeric - 一个新实现的转换器,与 NoiseIntNoiseFloat 共享功能,但专门为数值(大整数或浮点数)设计。它提供了一个 decimal 参数来处理带有小数的值。

  • RandomChoice - 现在支持 hash 引擎

  • RandomDate, RandomFloat, RandomInt - 现在增强了哈希引擎支持。阈值参数 minmax 已更新以支持动态模式,允许更灵活的配置。

  • RandomNumeric - 一个新转换器,专门为数值类型(大整数或浮点数)设计,与 RandomIntRandomFloat 共享类似的功能,但针对处理巨大的数值。

  • RandomString - 现在支持哈希引擎模式

  • RandomUnixTimestamp - 这个新转换器生成具有可选单位(secondmillisecondmicrosecondnanosecond)的 Unix 时间戳。其功能与 RandomDate 类似,它支持哈希引擎以及 minmax 阈值的动态参数,并且可以使用 min_unitmax_unit 参数覆盖这些单位。

  • RandomUuid - 添加了哈希引擎支持

  • RandomPerson - 实现了一个新转换器,取代了 RandomNameRandomLastNameRandomFirstNameRandomFirstNameMaleRandomFirstNameFemaleRandomTitleMaleRandomTitleFemale。这个新转换器提供了增强的可定制性,同时提供了与先前版本类似的功能。它根据提供的 gender 参数生成个人数据,例如 FirstNameLastNameTitle,现在支持动态模式。未来的小版本将允许覆盖默认姓名数据库。

  • 添加了 tsModify - 一个用于修改 time.Time 对象的新模板函数

  • 引入了一个新的 RandomIp 转换器,能够根据指定的网络掩码生成随机 IP 地址。

  • 添加了一个新的 RandomMac 转换器,用于生成随机 MAC 地址。

  • 由于引入了更灵活和统一的选项,已删除的转换器包括 RandomMacAddressRandomIPv4RandomIPv6RandomUnixTimeRandomTitleMaleRandomTitleFemaleRandomFirstNameRandomFirstNameMaleRandomFirstNameFemaleRandomLastNameRandomName

有用链接