2011-01-07 108 views
2

我一直在試圖找出加密我的數據庫中的敏感列的好方法。我認爲SQL Server的內置加密機制可以做到這一點,但是我錯過了某些東西或者做錯了。SQL Server 2008列加密

最初的計劃是創建具有用對稱密鑰加密列的表,並且具有視圖從表中未加密的選擇數據。但是,我無法弄清楚如何在視圖選擇語句中使用DecryptByKey方法。再加上它讓我想到數據將不會被加密,所以除非連接是安全的,否則它將毫無意義。

然後,我認爲把所有的加密/解密,以我的應用程序。我認爲

  1. 如果數據庫完全無法解密自己的數據,那麼有人滲透數據庫根本無法做多。

  2. 這將節省服務器試圖解密/加密信息的努力,如在數據庫加密/解密可以在一臺工作站上影響性能在全球範圍,而不僅僅是。

因此,我的應用程序對每列需要加密的「硬編碼」IV和密鑰。它將加密信息發送到數據庫,並從數據庫接收加密信息。這只是爲了讓你想起你,我知道我必須把IV和密鑰放在其他地方......它們在應用代碼中並不安全。

我在想這個瘋狂的想法:

客戶端應用程序將包含一個密鑰和IV。服務器將在單個表中包含所有加密列的Keys/IV。但是,Keys/IV的值將使用客戶端應用程序所持有的Key/IV進行加密。

在啓動時,客戶端應用程序將所有的鍵/從DB的IV加載到內存中,並且根據需要,以查看從服務器選擇的數據解密。

也可能有這將用戶加入與他們被允許使用的密鑰的關係。因此,該應用只會解密用戶有權查看的列。

您認爲這個想法是一個勝利還是鬆動?而且,在給定客戶端應用程序/ SQL Server場景的情況下,你們是如何實現加密的呢?

回答

1

YOu鬆動。點。沒有機會使用索引等

如果你想安全,把它放在一個安全的服務器上,並加載企業版和使用數據庫文件加密。

+0

這是真的嗎?該計劃是加密敏感的「僅數據」列,如社會安全號碼,電話號碼,信用卡號碼等。我通常不會索引的列。 – instantmusic 2011-01-07 20:00:11

0

考慮放入中間層來處理加密/解密。假設你可以把它放在服務器上,你可以保持對位的控制,而不用擔心客戶端應用程序(可能有些不在你的控制之下)被反編譯(並暴露密鑰)。