2017-01-16 42 views
3

什麼是最有效的方法或工具來隨機化數據庫表列以隱藏敏感信息?如何清理或隨機化敏感數據庫字段

我有一個Django應用程序被幾個客戶使用,我需要在開發承包商的工作上做一些工作。當他們處理錯誤時(例如,頁面/ admin/model/123有錯誤),理想情況下他們需要客戶端數據庫的快照以重現和修復錯誤。但是,由於他們是非現場承包商,我想在他們公開客戶數據庫(無意或無意)的情況下降低風險。我不想向客戶解釋爲什麼他們的所有數據都是在網上發佈的,因爲外國合同商將他的筆記本電腦留在未上鎖的汽車中。

爲此,我想查找或編寫一個工具來「隨機化」數據庫中的敏感字段,如用戶名,電子郵件地址,帳號,公司名稱,電話號碼等,以便數據得到維護,但所有個人身份信息都被刪除。

可能這是許多其他人不得不做的任務,但我不確定技術術語是什麼,所以我沒有通過Google找到太多東西。是否有任何現有工具可以通過運行MySQL或PostgreSQL後端的Django應用程序來執行此操作?

回答

1

匿名化消毒對於這件雜事來說是好話。

這樣做相對容易。使用查詢如

UPDATE person 
    SET name = CONCAT('Person', person_id), 
     email = CONCAT('Person', person_id, '@example.com') 

等等,以跺腳實際名稱和電子郵件等等。保留條目的唯一性很有幫助,各種表格的自動增量ID可以幫助您做到這一點。

+0

這可能適用於簡單的字段,但這不適用於更復雜的字段,如地址,電話號碼或帳戶號碼需要匹配特定的格式,但仍然是全球唯一。 – Cerin

1

(添加此作爲一個答案,因爲我不能評論。)

正如Cerin說,O. Jones入路爲匿名/消毒簡單的領域工作,但沒有更復雜的像地址,電話號碼或需要匹配特定格式的帳號。但是,該方法也可以修改以允許這一點。

讓我們以格式爲aaa-bbbb-ccc的電話號碼爲例,並使用autoincrementing person_id作爲唯一編號的來源。對於電話號碼的ccc部分,請使用MOD(person_id,1000)。這將給person_id的剩餘部分除以1000.對於bbbb,採用MOD((person_id-MOD(person_id,1000))/ 1000,10000)。它看起來很複雜,但是這樣做的是採取person_id,刪除最後三位數字(用於ccc),然後除以1000.最後四位數字從結果數字中作爲bbbb使用。我想你可以弄清楚如何計算aaa。

的電話號碼的三個部分可以再級聯,給出完整的電話號碼:CONCAT(AAA,「 - 」,BBBB,「 - 」,CCC)

(您可能需要顯式轉換數字字符串,我不確定)