2016-10-04 48 views
3

我在這裏搜索這個主題。加密靜態數據

我發現一些話題談論加密數據庫級別的數據(MySQL)。但是,僅僅從版本5.7

現在我想找到例如一個解決方案,請我怎麼能與應用數據加密工作。

我使用的PHP與MySQL數據庫。我想例如銀行帳號在我的數據庫

加密我有表名爲banknameidaccount_number

我怎樣才能加密賬號?它與使用PHP的普通加密方法有何不同?

我希望我能很好地解釋我的問題。請讓我知道,如果ii可以提供更多的細節。

+1

不加密的列(注意我在AgilData首席架構師)。 **加密驅動器**。如果這是需要認真關注的敏感數據,您必須**聘請安全顧問提出建議。這很容易出錯。 – tadman

回答

1

老實說,我推薦使用加密存儲在文件系統或硬件水平,只是讓MySQL的正常工作。如果您使用亞馬遜,它們支持加密的EBS卷和S3存儲桶。

MySQL具有可以在SQL表達式中調用的加密函數。見https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html

例如:

INSERT INTO bank 
SET id = 1234, 
    name = 'ABC Bank', 
    account_number = AES_ENCRYPT('8675309', 'password'); 

然後,你必須解密爲你獲取:

SELECT name, AES_DECRYPT(account_number, 'password') 
FROM bank WHERE id = 1234; 

該方法的一個大問題是,你的密碼是在純文本在查詢日誌和二進制日誌!對我來說似乎是一種破壞行爲。這就是透明數據加密(TDE)更可取的原因。

但是,我知道專門爲MySQL社區或MySQL企業或MySQL的其他變體內置無TDE執行。

MySQL企業號稱有輔助加密功能(https://www.mysql.com/products/enterprise/encryption.html),但是這其實只是一些額外的功能,你可以在SQL表達式調用。這不是透明的,因爲每次插入或獲取數據時都必須更改應用程序代碼以顯式調用加密函數。

MariaDB 10.1聲稱支持透明加密存儲,文檔在這裏:https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/我沒有使用它,但是它們的實現有很多限制,我認爲它不是一個很好的解決方案。例如:二進制日誌,查詢日誌和錯誤日誌不能不加密,因此敏感數據可能會泄露。另外,某些備份工具不適用於加密的數據庫。

加密存儲並不能幫助加密數據在飛行中,即在網絡上的應用程序從數據庫服務器讀取數據。對於飛行中的數據,所有MySQL變體都支持SSL網絡連接。

你還是擔心數據時,在應用程序本身,或者在不同的高速緩存層像memcached的或魷魚或MySQL查詢緩存RAM存在了。

數據也存在於備份和日誌中。有一個保證這些的計劃。他們如何存儲?誰有權限訪問?他們是否曾經被複制到不安全的環境中?他們安全地處理了嗎?

3

我建議查看這個開源項目,爲MySQL數據庫提供零知識加密。這使用AES-256來加密進入數據庫的數據,然後解密結果集,使加密對應用程序透明。這超越了「靜止」和「過境」加密,通過確保在數據泄露事件中,黑客在對數據庫運行SQL查詢時看不到未加密的數據。

http://www.agildata.com/agildata-zero-zero-knowledge-encryption-mysql/


+1

您應該真正編輯您的答案,以披露您爲AgilData工作。此外,像你這樣的只有鏈接的答案是不鼓勵的,因爲它們不包含可搜索的內容。 – zaph