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

PostgreSQL Anonymizer 1.0:Postgres 的设计隐私

发布于 2022-05-21,作者 Dalibo
相关开源项目

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

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

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

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

使用 PostgreSQL 实现“设计即隐私”

在 GDPR(通用数据保护条例)推出四年后,其在许多公司和组织的应用仍然很复杂。特别是,实现“设计即隐私”原则仍然令人头疼……我们如何在应用程序设计的过程中直接写入数据保护规则?

绝大多数当前的匿名化工具都在数据库外部工作,采用与 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 提供了工具,帮助他们尽早实施数据掩码规则,从而遵守“设计即隐私”原则。

如何安装

该扩展 officially supported 在 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