2015-01-13 41 views
1

如何加密mnesia數據庫和什麼是最安全的方式來加密mnesia數據庫。加密mnesia

erlang中是否有內置的方法來加密和解密具有高安全級別的數據?

+0

你能詳細說一下嗎?當然在Erlang中加密和解密數據的方法很多,但這個問題很模糊,很難回答。 – Stratus3D

+0

也許你應該看看加密庫http://erlang.org/doc/man/crypto.html –

+0

看看zerodb的白皮書,你可以在查詢層面上在mnesia上使用類似的方法 – beenotung

回答

5

簡短的回答

龍答案

數據庫加密是不是一個簡單的問題。

您必須先決定「加密數據庫」的含義。這是否意味着數據在內存中不可讀?它在磁盤上無法讀取?它是不是外部不透明的blob,除了(可能是無環境的/無意義的)單一密鑰之外是不可查詢的?一切都是單向的嗎?是否需要高速比較哈希值?如果可逆,密鑰是如何訪問的?加密是在數據庫中執行的,還是僅用於存儲事物的數據庫?等等...

在Mnesia(和任何其他數據庫)值必須是可讀的在查詢中使用。在像Postgres這樣的重型數據庫中,加密的數據庫列意味着數據在磁盤上被加密,而關於Postgres的其他內容意味着您永遠不會知道任何給定表格同時在內存中佔多少 - 這意味着磁盤數據必須每當內存中沒有被緩存的行被遍歷時,就可以進行解密和加密。表演時間爲沉重受此影響。

Mnesia(和ETS表,就此而言)可以使所有活動數據一次保留在內存中 - 並且查詢其中的任何數據時,數據在內存中必須是未加密的。因爲您可以設置保存到磁盤的明確標準,所以在調用加密庫時將磁盤寫入過程包裝起來並不重要,因此將其保存在磁盤上,而是在內存中進行明文加密(因此很有用)。

你的鑰匙,而另一方面,這是另外一個問題...

大多數時候,我們都在討論數據庫加密我們真正的意思是,是否有存儲用戶密碼的方式作爲散列而不是明文(而不是以這種方式存儲整個數據存儲中的每個值)。這是一個非常不同的問題,因爲要使密碼有用,它們只需要具有可比性,並且不需要保留原始密碼。 (例如,考慮the short set of functions used here接受鹽,加密和驗證密碼。)

「加密數據庫」的含義在任何數據系統可以說是提供加密功能之前都需要澄清,並且總是存在折衷。