Greenmask 0.2.0 - 0.2.5 版本发布

发布于 2024-12-12,作者:Greenmask.io
相关开源

PostgreSQL 数据库匿名化和合成数据生成工具

这些版本的发布标志着重要的里程碑,显著扩展了 Greenmask 的功能,并将其转变为一个简单、可扩展且可靠的数据库安全、数据匿名化和日常操作解决方案。我们的目标是构建一个核心系统,作为全面动态暂存环境和强大数据安全的基础。

这些更新引入了新功能,例如数据库子集、pgzip 支持、拓扑顺序恢复和重构的转换器,极大地增强了 Greenmask 的灵活性,以满足不同的业务需求。它们还包括许多修复和改进。

Greenmask 概述

Greenmask 是一个强大的开源实用程序,专为逻辑数据库备份转储、匿名化、合成数据生成和恢复而设计。它是无状态的,不需要对数据库模式进行任何更改。它被设计为高度可定制的,并且与现有的 PostgreSQL 实用程序向后兼容,快速可靠。

非常适合用于

  • 备份和恢复:简化日常任务,如逻辑备份、截断后的表恢复或轻松替换 pg_dump 和 pg_restore。
  • 匿名化和数据脱敏:通过匿名化和转换备份来简化暂存环境设置和分析任务,确保一致、安全的数据,以便更快地进行

Greenmask 在 GitHub

显著变化

  • PostgreSQL 17 支持 - 修订了移植库以支持 PostgreSQL 17

  • 数据库子集 - 一项新功能,允许您定义数据库的子集,从而缩小转储大小 (#110)。这对于多用途特别有用,尤其适用于测试和开发环境。它支持

    • 具有 NULL 值的引用 - 为具有 NULL 值的 FK 引用生成 LEFT JOIN 查询,以将其包含在子集中。
    • 支持虚拟引用(虚拟外键)- 在 Greenmask 中创建一个逻辑 FK,它将用于子集依赖关系图。虚拟引用可以为列或表达式定义,允许您从 JSON 和类似内容中获取值。
    • 支持 循环引用 - Greenmask 将通过生成递归查询自动解决子集中的循环依赖关系。该查询的生成带有子集的完整性检查,确保从循环依赖关系收集的数据是一致的。
    • 完全包含在文档中,包括故障排除示例
    • 支持具有多个列(或表达式)的 FK 和 PK。
    • 支持 一个强连通分量 (SCC) 中的多循环解析 - Greenmask 将为 SCC 生成递归查询,无论它是一个循环还是多个循环,使子集系统适用于任何数据库模式。
    • 支持多态关系 - 您可以使用 polymorphic_exprs 属性为具有多态引用的表定义虚拟引用,并使用 Greenmask 为此类表生成子集。
  • 转换条件 - 仅在满足指定条件时才执行定义的转换。#133

  • 转换继承 - 分区表和具有外键的表的转换继承。定义一次并应用于所有。[#229]
  • pgzip 支持更快的压缩解压缩 — 设置 --pgzip 可以通过并行压缩来加快转储和恢复过程。在一些测试中,它显示转储和恢复操作速度提高了 5 倍。
  • 拓扑顺序恢复 - 此标志确保在恢复其依赖的表之前不会恢复依赖表。当您希望尽可能快地收到错误通知,而无需等待整个表恢复时,这非常有用。
  • 插入格式恢复 - 为了灵活的恢复过程,Greenmask 现在支持 INSERT 格式的数据恢复。它根据转储中的 COPY 记录生成插入语句。您无需重新转储数据即可使用此功能;它可以在 restore 命令中定义。与 INSERT 格式相关的新功能列表

    • 如果设置了标志 --on-conflict-do-nothing,则生成带有 ON CONFLICT DO NOTHING 子句的 INSERT 语句。
    • 配置中的 错误排除列表 用于跳过某些错误并继续从转储中插入后续行。
    • 用例 - 逻辑数据的增量转储和恢复。例如,如果您有一个数据库,并且您希望定期从另一个源插入数据,则可以将其与数据库子集和转换一起使用,以追赶目标数据库。
  • 恢复数据批处理 (#173) - 默认情况下,COPY 协议仅在事务提交时返回错误。要覆盖此行为,请使用 --batch-size 标志指定在 COPY 命令期间在单个批次中插入的行数。当您要控制事务大小和提交时,这非常有用。

  • 引入 keep_null 参数用于 RandomPerson 转换器。

  • 在转换器中引入了动态参数

    • 现在大多数转换器都支持在适用的情况下使用动态参数。
    • 动态参数是严格强制执行的。如果您需要将值转换为其他类型,Greenmask 提供了模板和可通过 cast_to 访问的预定义转换函数。这些函数涵盖了频繁的操作,例如 UnixTimestampToDateIntToBool
  • 转换逻辑已进行了重大重构,使转换器比以前更可自定义和灵活。
  • 引入了转换引擎

    • random - 根据伪随机算法生成转换器值。
    • hash - 使用哈希函数生成转换器值。目前,它使用安全的但执行速度较慢的 sha3 哈希函数。在稳定版本中,可以选择 sha3SipHash
  • 引入了静态参数值模板

  • 转储保留管理 - 为删除命令引入了保留参数 (#201)。引入了两个新状态:失败和进行中。如果缺少“完成”心跳信号或上次心跳时间戳超过 30 分钟,则认为转储失败。删除命令现在支持以下保留参数

    • --dry-run:在测试模式下以详细输出运行删除操作,而实际上不删除任何内容。
    • --before-date 2024-08-27T23:50:54+00:00:删除早于指定日期的转储。日期必须以 RFC3339Nano 格式提供,例如:2021-01-01T00:00:00Z
    • --retain-recent 10:保留 N 个最近的转储,其中 N 由用户指定。
    • --retain-for 1w2d3h4m5s6ms7us8ns:保留指定持续时间的转储。格式支持周 (w)、天 (d)、小时 (h)、分钟 (m)、秒 (s)、毫秒 (ms)、微秒 (us) 和纳秒 (ns)。
    • --prune-failed:修剪(删除)所有失败的转储。
    • --prune-unsafe:修剪状态为“未知或失败”的转储。此选项仅与 --prune-failed 结合使用。

版本列表

链接

如果您有任何问题或需要帮助,请随时与我们联系