2011-08-31 86 views
2

我希望能夠加密保存在MySQL數據庫中的所有數據。我還需要能夠使用私鑰解密數據。加密和解密數據庫中的所有數據

該數據庫可以被多個人訪問。

我想知道我需要使用哪些PHP功能來完成此操作。

謝謝

+0

它是否必須在PHP?你也可以使用mysql。查看[本頁](http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_aes-decrypt) –

+2

使用MySQL加密函數對MySQL中的數據進行加密是一種危險的缺陷方法,因爲數據庫連接默認情況下不是**加密的,並且SQL語句(包括加密密鑰!)可以保存在各種MySQL日誌文件中。 – duskwuff

+6

你想保護什麼?您可能會更好地對MySQL使用的文件系統進行加密,然後爲您創建的任何用戶強制使用SSL,以確保傳輸的任何數據都已加密。然後,您不必擔心編寫自己的加密和可能的代碼泄漏。 –

回答

11

加密整個數據庫是一個很大的麻煩,除非該數據庫提供了「透明加密」,Oracle數據庫提供了這樣的事情。使用透明加密的輕量級開源解決方案是SQLite。使用此功能,加密不直接應用於數據,但存儲本身已加密。這意味着您可以像平常一樣處理數據庫,並增加物理存儲的加密優勢。但不幸的是,MySQL不提供這樣的事情。

首先,爲什麼加密你的數據庫不是一個好主意。加密數據看起來像隨機垃圾到您的數據庫。這意味着很多負面的東西,如

  • 的SELECT不再對您的數據,因此它們以前那樣,途中如果在所有(需要大量的努力)
  • 索引變得幾乎無用
  • 數據庫日誌形同虛設
  • ...

如果您加密使用MySQL的內置encryption support那麼這意味着數據本身以純文本格式的數據庫發送 - 除非你使用TLS-SECUR這意味着竊聽者根本不關心你的加密。

所以如果你需要加密數據,你應該保持在最低限度,只加密數據中真正敏感的部分,以便仍然能夠執行高效的查詢。如果應用程序和數據庫之間不存在安全的TLS連接,則還應該直接在應用程序中加密數據。