我会推荐一种不同的方法。其中,GDPR 要求将某些敏感信息存储在与操作数据不同的服务器中。这样,如果没有适当的权限,JOIN 将很困难或不可能。在卫生和金融系统中尤其如此。
在您的情况下,您的问题是电子邮件被视为个人数据。在不讨论你是否矫枉过正的情况下,我可以建议你一种假名化方法,它可以帮助你轻松地完成上述步骤,而不是重新设计和迁移整个数据库。
您可能希望为每个用户关联一个与电子邮件地址或用户名无关的主要标识符,例如数据库自动增量键或 GUID。然后,可以使用该键引用与该用户相关的所有内容。
现在,您可以轻松地将登录凭据存储在单独的表中。将来,如果业务需要,可以将此类表移动到不同的数据库中。
CREATE TABLE users(
userid VARCHAR(64) PRIMARY KEY, --uuid generated
language VARCHAR(2) NULL,
theme VARCHAR(30) NULL,
....
...... -- any information that is not strictly protected by GDPR
);
CREATE TABLE accounts(
userid VARCHAR(64) NOT NULL PRIMARY KEY,
email VARCHAR(256) NULL,
password_hash VARCHAR(64) NULL,
failed_logins INT NOT NULL DEFAULT 0,
last_login DATETIME NULL,
-----
);
当用户要求删除个人信息或数据保留时钟滴答作响时,不可知的 ID 可帮助您将非个人信息保存在其他表格中(例如,历史旅行列表现在变得匿名)。
您可以将上述方法提升到一个新的水平。
考虑帐户表。如果您希望允许用户删除他们自己的帐户但保留电子邮件地址的唯一性记录(例如,以防止人们重置他们的历史记录),您可以取消电子邮件地址但保留一个带有电子邮件地址哈希的附加列,因此当电子邮件地址无效时,哈希不会。
之后,当用户尝试使用较旧的电子邮件地址注册时,您有证据表明该用户已删除他的帐户:您可以决定要做什么。