1 回答
TA贡献1883条经验 获得超3个赞
我会通过添加一个新列first_name_enc来存储字符串的加密版本来做到这一点。
然后,您可以在过渡到完全加密时临时存储加密和未加密的值。
ALTER TABLE contacts ADD COLUMN first_name_enc VARBINARY(...);
当你读取值时,解密它,但如果值为 NULL,那么它必须是尚未转换的行,所以回退到原始的未加密列。
SELECT COALESCE(AES_DECRYPT(first_name_enc, <key-string>), first_name) ...
在整个应用程序中放置此代码后,您可以开始批量转换行:
UPDATE contacts SET
first_name_enc = AES_ENCRYPT(first_name, <key-string>),
first_name = NULL
WHERE id BETWEEN 1 AND 1000;
在您完成将所有内容转换为加密并且您的应用程序不再插入未加密的列之后,您可以将条件查询转换为简单地读取加密的列并对其进行解密。
SELECT AES_DECRYPT(first_name_enc, <key-string>) ...
然后最后删除未加密的列,因为它们现在只包含 NULL。
ALTER TABLE contacts DROP COLUMN first_name;
我建议您在投入时间进行这项工作之前,先确认您真正需要做的有关加密的事情。我读过声称 GDPR 实际上并未强制加密的文章。https://www.i-scoop.eu/gdpr-encryption/
但对互联网文章持保留态度。请咨询合格的专家。即使支付专业专家的咨询费,也可能为您节省数以万计的软件开发成本!
- 1 回答
- 0 关注
- 115 浏览
添加回答
举报