2011-07-20 103 views
2

我有一個sql數據庫,它需要存儲一組必須快速查詢的人口統計個人數據。存儲加密字段數據的最佳數據類型

要求規定數據必須加密,因爲它是個人信息,但也必須搜索以允許記錄匹配。

我的問題是什麼樣的數據類型應該定義這些字段作爲哪些將存儲加密數據,如果他們是varchar或varbinary?

我的想法是,varbinary將減少代碼中的不必要開銷,將加密數據轉換爲base64字符串,但是在sql中查詢此數據比查詢varchar字段要慢很多。我不確定varbinary字段如何執行非聚集索引?

我的問題確實針對查詢性能。比較字段是否相等時,存儲varbinary數據是否會影響查詢性能?

+0

我明白了。這不是一個問題,因爲精確的比較是所有必需的。查詢性能是我最關心的問題。我需要能夠儘可能快地匹配這些字段上的記錄。 – Sheff

+0

許多RDBMS允許單個列被數據庫*加密* - 免除您手動加密數據的麻煩。檢查你的文檔,看看你的系統是否支持這個,以及如何查詢存儲這些數據的數據。 –

回答

1

我過去所做的是計算加密數據的散列並將其存儲在另一列中。散列可以是您可以索引的varchar字段。總的來說,我認爲與varbinary搜索相比,varchar字段可以提供更好的查詢性能。

+0

我實際上是在一組強制性參數上做這個,不幸的是我需要添加一些其他參數用於進一步的可選過濾。 – Sheff

1

您需要保護整個數據庫 - 而不是單個字段。否則,你將無法查詢它們。

+0

這不完全正確。查詢的精確字段比較是可能的,這是我所需要的。保證整個Db有其他問題。我認爲數據在傳遞到數據庫之前應該被加密。作爲一個整體,數據庫加密確實只能保護文件,但其他攻擊將意味着數據被泄露 – Sheff

+0

然而,其他技術也可用於保護數據(如您似乎正在描述的數據,如HTTPS)。 –

+0

通過任何方式獲得SQL登錄時會發生什麼?攻擊者可以使用純文本記錄。關於HTTPS,我會談談你的觀點,但是我擔心的數據會通過網絡處理。 – Sheff