1 回答

TA貢獻1883條經(jīng)驗 獲得超3個贊
我會通過添加一個新列first_name_enc來存儲字符串的加密版本來做到這一點。
然后,您可以在過渡到完全加密時臨時存儲加密和未加密的值。
ALTER TABLE contacts ADD COLUMN first_name_enc VARBINARY(...);
當(dāng)你讀取值時,解密它,但如果值為 NULL,那么它必須是尚未轉(zhuǎn)換的行,所以回退到原始的未加密列。
SELECT COALESCE(AES_DECRYPT(first_name_enc, <key-string>), first_name) ...
在整個應(yīng)用程序中放置此代碼后,您可以開始批量轉(zhuǎn)換行:
UPDATE contacts SET
first_name_enc = AES_ENCRYPT(first_name, <key-string>),
first_name = NULL
WHERE id BETWEEN 1 AND 1000;
在您完成將所有內(nèi)容轉(zhuǎn)換為加密并且您的應(yīng)用程序不再插入未加密的列之后,您可以將條件查詢轉(zhuǎn)換為簡單地讀取加密的列并對其進行解密。
SELECT AES_DECRYPT(first_name_enc, <key-string>) ...
然后最后刪除未加密的列,因為它們現(xiàn)在只包含 NULL。
ALTER TABLE contacts DROP COLUMN first_name;
我建議您在投入時間進行這項工作之前,先確認(rèn)您真正需要做的有關(guān)加密的事情。我讀過聲稱 GDPR 實際上并未強制加密的文章。https://www.i-scoop.eu/gdpr-encryption/
但對互聯(lián)網(wǎng)文章持保留態(tài)度。請咨詢合格的專家。即使支付專業(yè)專家的咨詢費,也可能為您節(jié)省數(shù)以萬計的軟件開發(fā)成本!
- 1 回答
- 0 關(guān)注
- 135 瀏覽
添加回答
舉報