2012-05-23 173 views
4

如何將敏感數據存儲在MySQL數據庫中?將敏感數據存儲在MySQL數據庫中

1)我應該更關注MySQL數據庫的安全性並將數據存儲爲純文本嗎?

2)我應該對數據進行加密?

  • 如果是,那麼應該如何進行加密?
    1. 使用MySQL aes_encrypt/aes_decrypt?
    2. 使用PHP的AES函數/算法來加密/解密數據?
  • 數據應該如何存儲在MySQL中?
    1. BLOB
    2. BINARY
    3. VARBINARY

在我的情況下, '敏感' 的數據是由個人完成付款。

感謝

+3

它非常依賴於您的應用程序。 – eggyal

+1

是的,它取決於你需要存儲什麼樣的數據, – jugnu

回答

3

它是兩者的混合物。現有的兩個答案(當時我寫了這個https://stackoverflow.com/a/10718397/1015483https://stackoverflow.com/a/10718459/1015483)是有效的 - 你需要看的約5可能的攻擊方法,我能想到的

  • 他們可以訪問你的數據庫服務器;所以是的,儘可能地保證寶寶的合理性(Matt的回答)
  • 獨立數據劫持(某人以某種方式獲取您的數據庫數據,可能是備份,可能是他們猜測密碼,如果您轉移,可能是MITM數據從一個地方到另一個地方)。爲此,您可以加密數據。您也可能出於某種原因進行CSV轉儲,並通過電子郵件發送給某人。哎呦。但它發生。所以加密(vlzvt的回答)沒有提及

但三個要素:

  • 他們可以訪問你的Web服務器(如果您的數據庫服務器不同)。如果他們有權訪問網絡服務器,所有的賭注都會因爲他們有你的密碼而被關閉,加密密鑰很重要。所以你需要比DB服務器更安全。 (太可能意味着以上 - 但只是說清楚)
  • 與上述類似,但不是被遺忘,就是如果有人得到phpMyAdmin或者你的管理consule訪問。不要使用純文本認證或配置存儲的密​​碼進行訪問。
  • 最後還有你的應用程序本身(也是最難鎖定的)。您需要防止可能會泄露數據的SQL注入。如果有人通過未查詢的查詢獲得訪問權限,加密數據將停止最小化問題 - 因此,加密是解決方案。

對於你的問題的第2部分:

使用MySQL加密/解密功能會阻止別人誰有權訪問原始數據,而不是中間人或SQL注入,甚至CSV轉儲採取交通。

因此,國際海事組織(而且這只是我的看法和我已經完成的方式)是用PHP加密並通過網絡發送加密的數據,因爲這會停止捕獲數據的所有方法以及CSV轉儲將被「炒作」。

如果你這樣做,你不妨用VARBINARY/BLOB類型,因爲它阻止你不小心嘗試讀取在phpMyAdmin /編輯。 Plus可能會名義上保存幾個字節(儘管這取決於索引和其他內容 - 所以這本身並不是一個成功的論點)。


而現在的一面:搜索和排序。任何索引或搜索的內容(如果加密的話)只會匹配整個精確的區分大小寫的字符串,以填充到正確的長度(通常搜索將不區分大小寫,您可以使用LIKE進行部分搜索)。如果你想訂購,那麼你需要原始的字符串。所以在設計結構時要考慮到這一點。

希望有所幫助。

+0

做系統安全的過程就像一個AAA協議,一個多層次的任務,在每個層次上,每個層次之間的問題是不同的。好回答 –

+1

@Robbie我們應該解決他對列加密數據的列類型問題:1.BLOB,2.BINARY,3.VARBINARY 幫助其他人尋找類似的信息或意見。 對於答案,我會去這個S.O.問題/答案(BLOB): http://stackoverflow.com/questions/15980025/use-blob-or-varbinary-for-encrypted-data-in-mysql – Ligemer

3

什麼是最壞的情況下,如果一個攻擊者獲得訪問純文本數據?鑑於您必須對數據進行解密才能使其有用,因此您需要將加密密鑰設置爲可訪問的地方,因此任何能夠訪問數據庫的攻擊者都可能獲得密鑰,除非這是爲了歸檔而不是例如一個現場網站。我會專注於數據庫服務器的安全性,除非您在充滿可能會丟失數據的硬盤上安裝硬盤驅動器,但這取決於您爲什麼需要對其進行加密。

+0

加密密鑰是爲了安全,可以安全地隱藏在zend-ed php文件中,並且可能被破壞。 – 2012-05-23 10:59:34

1

,如果您需要在可能遭到入侵的數據庫來保護數據,您可以加密 與mcrypt

$key = "mykey"; 
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$key,$data,MCRYPT_MODE_ECB,$key); 

後,你可以選擇BLOB,TEXT,MEDIUMTEXT或任何它的基礎上,〜預期的數據尺寸。 *對於VARBINARY/BINARY您可能首先需要pack

1

加密操作有額外的成本。

您需要評估是否在您的情況,這額外的費用將是一個問題,每例如,如果你的數據增長到相當的規模。

第一前沿,以避免數據泄露是與等訪問配置文件的強大的數據訪問策略。這有一個缺點,你需要管理MySQL並配置它。

如果你想關心的配置文件管理中的應用,你可以將數據加密假設CPU的額外成本和(取決於encyption算法)一個額外的存儲空間。

一個系統的安全性等於更弱的組件的安全性,不要只將注意力集中在加密任務上,這隻會給你安全感,如果數據可以被解密,唯一的入侵者需要的是時間和力量打破加密