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 關注
- 132 瀏覽
添加回答
舉報