PostgreSQL Anonymizer 1.0:为 Postgres 设计的隐私保护

由 Dalibo 于 2022-05-21 发布
相关开源

法国利摩日,2022年5月17日

PostgreSQL Anonymizer 是一个扩展,用于隐藏或替换 PostgreSQL 数据库中的个人身份信息 (PII) 或商业敏感数据。

该扩展支持 3 种不同的匿名化策略:动态掩码静态掩码匿名转储。它还提供了多种掩码函数,如替换、随机化、伪造、假名化、部分加扰、洗牌、噪声添加和泛化。

注意:此版本被认为已准备好投入生产

使用 PostgreSQL 实现“隐私设计”

在 GDPR 推出 4 年后,其应用对于许多公司和组织而言仍然复杂。特别是,“隐私设计”原则的实施仍然令人头痛……我们如何在应用程序设计期间直接编写数据保护规则?

目前绝大多数匿名化工具都在数据库之外工作,使用与 ETL 工具相同的方法。因此,编写匿名化策略的责任通常分配给生产 DBA。

PostgreSQL Anonymizer 扩展引入了一种不同的方法,它试图让开发人员和架构师在初步设计步骤中尽早参与进来,通过使用 SQL 直接在数据库模型本身中声明掩码规则,其方式与完整性约束或索引相同!

当开发人员想要向表中添加新列时,她/他通常会定义一些针对此列强制执行的规则和限制。使用 PostgreSQL Anonymizer,她/他还可以声明此列包含个人信息,并编写掩码规则来描述在匿名化过程中如何转换数据。

该扩展提供了一系列掩码技术:随机化、噪声、伪造、部分破坏、假名化、泛化等。

对于在法国公共财政总局 (DGFiP) 建筑和标准办公室工作的 Thierry Aimé 来说,该扩展在数据保护策略中起着关键作用。

« 通过 PostgreSQL Anonymizer,我们从数据库的设计中整合了这样一个原则,即在生产之外,数据必须匿名化。因此,我们可以强制执行 RGPD 规则,而不会影响例如版本升级期间的测试质量。 »

这是一个基本示例

 CREATE TABLE player(
     id SERIAL,
     lastname TEXT,
     birth DATE,
     points INT
  );

SECURITY LABEL FOR anon ON COLUMN player.lastname
IS 'MASKED WITH FUNCTION anon.fake_last_name()';

SECURITY LABEL FOR anon ON COLUMN player.birth
IS 'MASKED WITH VALUE NULL';

或者,如果该列可以声明为间接标识符,则生产 DBA 将能够使用 K 匿名性 函数来检查是否存在在数据集中识别出个人的风险。

数据保护是一项团队工作!参与应用程序生命周期的每个人都应该关心。考虑到这一点,PostgreSQL Anonymizer 扩展为开发人员和 DBA 提供了工具,并帮助他们尽早实施数据掩码规则,从而遵守“隐私设计”原则。

如何安装

此扩展在 PostgreSQL 9.6 及更高版本上得到官方支持。

在 Red Hat、CentOS 和 Rocky Linux 系统上,您可以直接从官方 PostgreSQL RPM 存储库安装它

dnf install postgresql_anonymizer14

然后使用以下命令加载扩展

ALTER DATABASE foo SET session_preload_libraries = 'anon';

在数据库中创建扩展

CREATE EXTENSION anon CASCADE;

最后,初始化扩展

SELECT anon.init();

对于其他系统,请查看安装文档

https://postgresql-anonymizer.readthedocs.io/en/latest/INSTALL/

感谢

PostgreSQL Anonymizer 得到了以下实体的财务支持

  • 法国公共财政总局 (DGFiP)
  • BioMerieux,体外诊断领域的全球领导者

非常感谢他们的帮助和反馈。

该项目包括来自数十位贡献者的代码、错误修复、文档、代码审查和想法。这个 1.0 版本是向他们表达我们感激之情的好机会!

如何贡献

PostgreSQL Anonymizer 是 Dalibo Labs 计划的一部分。它主要由 Damien Clochard 开发。

这是一个开放项目,欢迎大家贡献。我们需要您的反馈和想法!请告诉我们您对此工具的看法,它如何满足您的需求以及缺少哪些功能。

如果您想提供帮助,可以在这里找到初级工作列表

https://gitlab.com/dalibo/postgresql_anonymizer/issues?label_name%5B%5D=Junior+Jobs