第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 MySQL 普通數(shù)據(jù)庫值遷移到完全 AES 加密值 (PHP APi)

從 MySQL 普通數(shù)據(jù)庫值遷移到完全 AES 加密值 (PHP APi)

PHP
炎炎設(shè)計 2022-07-16 17:52:51
短的:由于 GDPR 法規(guī),從純文本數(shù)據(jù)庫值遷移到完全/完全加密值的最佳方法?解釋器:我剛剛收到一個“提示”,由于 GDPR(歐盟通用數(shù)據(jù)保護條例)法律要求的新“設(shè)計隱私”概念,所有“敏感”信息都需要加密。這包括姓名、地址、社交媒體資料、..我們目前正在為 2000 多個用戶運行一個完整的生產(chǎn)數(shù)據(jù)庫,只能通過我們的 PHP REST API 訪問,該 API 用作所有 Web 和移動應(yīng)用程序的入口點(還沒有第三方開發(fā)人員)。該數(shù)據(jù)庫包含當(dāng)前以純文本形式存儲的電子郵件地址、地址、社交媒體句柄、姓名、IP 地址……(除了基于安全的敏感信息,如密碼、令牌……或用于身份驗證的任何其他值) /鑒別)。我不是這個(開發(fā)方面)的忠實粉絲,因為市長對性能、搜索算法、整個 PHP API 等的影響(感覺就像整個優(yōu)化和“完美設(shè)置數(shù)據(jù)庫”的結(jié)束),但因為它是必需的因為它是額外的保護層,所以我全力以赴。現(xiàn)在,我主要關(guān)心的是......一切都在積極運行,我們不能只是說“好的,關(guān)閉服務(wù)器,加密一切,部署新的 API 版本并重新打開它?!?。此外,我認(rèn)為這種遷移不能“一步一步”完成,所有事情都必須一次完成。如果 API 未準(zhǔn)備好在所有查詢中處理解密,則無法加密數(shù)據(jù)庫值,反之亦然,如果 API 期望所有內(nèi)容都被加密,則數(shù)據(jù)庫不能是純文本。(我很高興我將整個 API 類型的交易作為數(shù)據(jù)庫的唯一入口/讀取點,沒有自定義腳本/連接,所以這是一種解脫)我們正在運行一個功能強大的 VPS 服務(wù)器,因此由于冗余檢查和諸如此類的東西會導(dǎo)致一些性能損失,而且我們也在運行 staging/dev 環(huán)境,所以測試沒有問題。我會讓 MySQL 為每條記錄使用唯一鍵處理 AES,該鍵基于 ID(主鍵)和創(chuàng)建時間戳的組合,例如(這兩個值永遠不會改變)(這可能不是那么聰明萬一“出于某種原因”這個值確實發(fā)生了變化,數(shù)據(jù)已經(jīng)消失了..所以不確定),這樣我的 PHP 應(yīng)用程序在運行查詢時不需要以純文本形式傳遞密鑰,但是又一次, “創(chuàng)建解密密鑰”在查詢?nèi)罩镜戎腥匀豢梢姡虼恕白畎踩钡姆椒ㄊ亲?PHP 應(yīng)用程序加密和解密所有傳入/傳出數(shù)據(jù),但這會導(dǎo)致無法例如運行“搜索查詢”(除非我在這些特定查詢中發(fā)送密鑰..)。我的問題:怎么會這樣..?我應(yīng)該讓 PHP 處理加密/解密還是更好的 MySQL?當(dāng)記錄被請求時,是否有一種可用的方法可以遷移到加密值?..?我的想法是不觸及任何數(shù)據(jù)庫值(除了更新每個非整數(shù)列以處理當(dāng)前指定的字符數(shù)量的 2-3 倍),這可以在不影響生產(chǎn)的情況下完成。然后逐步更新所有 API 查詢,以檢查所選值是否已加密。當(dāng)一個部分運行正常時,更新該部分的表以加密所有值。作為一個(簡單的)例子MySQL方式;每個 SELECT 查詢:SELECT IF_AES_ENCRYPTED(first_name, AES_DECRYPT(first_name), first_name) AS first_name FROM contacts WHERE id = 1;(或)PHP 方式:檢索數(shù)據(jù):while ($row = $result->fetch_assoc()) {  $contact->setFirstName((IS_AES_ENCRYPTED($row['first_name']) ? AES_DECRYPT($row['first_name']) : $row['first_name']);}在部署結(jié)束時:UPDATE contacts SET first_name = AES_ENCRYPT(first_name);肯定有辦法做到這一點,但由于我是目前唯一的開發(fā)人員,我只是不確定什么是最實用/最有效的方法,或者我是否過度或考慮不足或不。只是在尋找其他執(zhí)行過這樣的遷移/更新的開發(fā)人員。謝謝,伯特。
查看完整描述

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ā)成本!


查看完整回答
反對 回復(fù) 2022-07-16
  • 1 回答
  • 0 關(guān)注
  • 135 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號