Axon Framewok与GDPR从“域事件条目”表中删除身体上的个人数据

问题描述

因此,让我们看一下当今通用数据保护条例(GDPR)的这个非常重要的问题。让我们弄清楚对于以下问题,Axon的最佳答案是什么。 (我在Spring Boot中使用Axon 4.1) 我向您介绍我的问题:

用户来了,例如,他想预定一个约会,他必须在其中输入电子邮件,电话号码等许多个人数据。在用户单击Enter之前,他必须接受隐私声明,其中包括我们将其个人信息存储多长时间。因此,当用户单击Enter时,后端将事件源用户输入的所有信息。他所有的隐私数据都将存储到Axon的“域事件条目”表中,以创建事件的汇总。用户的个人数据可以在有效载荷中找到。 因此,当存储时间到期时,我必须从我的所有表(包括Axon的Domain Event Entry表)中删除所有个人数据。

所以我的问题是如何从域事件条目中删除聚合。

我尝试了以下解决方案:

    @EventSourcingHandler
    public void on(CampaignDeletedEvent event) {
        markDeleted();
    }

但是它没有做任何事情,API表示:“将该聚合标记为已删除,指示存储库在适当的时候删除该聚合。” -应该物理上去除吗?它没有这样做,我等了30分钟,汇总表仍在表中,那意味着“适当的时间”?

在尝试删除失败后,我阅读了这个stackoverflow问题(Axon Framework: Delete Aggregate Root),其中Allard在评论部分对此表示:“是正确的。使用事件源,“删除”实际上并不存在。状态与其他状态一样,只是在“已删除”状态下,所有命令均被拒绝。”

好的。因此,这意味着我的“聚合”已失效,但是用户的个人数据仍在“域事件条目”表的有效载荷字段中,以用于聚合?

所以我必须以某种方式创建一个存储库并将其删除或使用sql脚本删除,您如何执行此操作?我可能错了一些新功能,但过时了,但是如果授权来了,那就是$$$$$$$$$$$$$$$$$

谢谢, 玛特

解决方法

Event Sourcing要求应用程序的状态更改不作为新状态(覆盖以前的状态)显式存储在数据库中,而是作为不可变系列事件存储在数据库中。您不应删除这些事件和/或更改内容。这样您就不会丢失任何数据/信息。系统中发生的所有事情都将被存储。如今,信息比存储价格更有价值,请不要将其丢弃;)

但是,并非所有使用者都应读取事件的某些属性,并且我们应该能够delete使用它们,而无需接触事件存储(事件系列)。解决此问题的常见方法之一是使用每个资源的不同加密密钥对敏感属性进行加密。仅将密钥提供给需要它的消费者。当需要删除敏感信息时,请删除加密密钥,以确保不再可以访问该信息。这实际上使敏感数据的所有副本和备份无法使用。这种模式被称为加密粉碎。加密粉碎模式当然仅与您的加密和密钥管理实践一样好,在我看来,这比仅在SQL表上运行删除操作更好(您是否真的删除了所有数据-日志呢?)>

Axon为此提供了一个商业模块Axon Data Protection modulehttps://axoniq.io/product-overview/axon-data-protection)。