2016-12-28 21 views
0

我有一個Ruby應用程序,用戶可以通過電子郵件地址註冊。這些將是真實專業人士的電子郵件地址,我不能因隱私原因查看它們。假設我無法查看這些電子郵件地址。postgresql:阻止超級用戶查看數據庫中的電子郵件列

我需要一種方法來隱藏這些電子郵件有一次我用一個選擇查詢,如:

SELECT * FROM users; 

在數據庫上。 '用戶'是包含電子郵件列的表格。一旦我使用這個查詢,我就可以看到每個用戶的所有電子郵件地址,這是有問題的。

這裏是我嘗試的解決方案:

1)我嘗試使用:

update users set email = 'testmail+user' 

一旦我進入了PSQL數據庫,這將實際的電子郵件設置成一個虛擬的電子郵件。問題是,我必須每隔一段時間輸入一行這個行,我想讓一封電子郵件成爲一封虛擬郵件,如果我不輸入此行,我仍然可以搜索實際的郵件。我試過使用數據匿名化寶石(https://github.com/sunitparekh/data-anonymization),但這依賴於ruby腳本,我不太確定每次用戶註冊時如何運行此腳本。 3)我遵循了tidus gem(https://github.com/Barzahlen/tidus)的說明,它假定匿名化選擇列的內容,但是一旦我進入psql數據庫並且我做出了我的選擇查詢,電子郵件就不會改變。

4)我試着讓另一個不是超級用戶的用戶和撤銷SELECT權限,但是我沒有訪問用戶的任何其他列。

總之,我需要一種方法,在註冊用戶輸入郵件後立即對郵件進行匿名處理,或者防止自己查看這些個人電子郵件地址。

你可以假設我仍然想查看其他列(即名字,姓氏)。

+1

這味道可疑的家庭作業。作爲數據庫超級用戶的全部想法是,您可以查看數據庫中的所有內容。如果您想阻止任何人閱讀電子郵件地址,則需要使用密碼派生函數(如bcrypt,scrypt或PBKDF2)對其進行哈希處理。但是,一旦散列,您只能驗證用戶是否輸入了正確的電子郵件地址。在插入數據之前,您還可以加密數據。但是,用戶必須輸入密碼才能解密記錄。 – Doug

回答

1

很簡單,在您不是超級用戶的計算機上加密該值。

這意味着在您訪問權限有限的應用程序服務器上或用戶計算機上。

沒有任何其他的方式來做到這一點

你爲什麼要記錄的電子郵件地址,如果你永遠也不想看見/使用其實際價值?

相關問題