2010-08-25 80 views
4

我需要在SQL Server 2008的表中存儲一些敏感信息。 數據是一個字符串,我不希望它以任何訪問數據庫的人都可讀的格式存在。如何在SQL Server 2008中存儲敏感信息?

我的意思是敏感信息是一個髒/污穢的單詞數據庫。我需要確保它們不在表和SQL文件中浮動。 同時,我應該可以在字符串上執行像「=」和「like」這樣的操作。

到目前爲止,我可以想到兩種選擇;這些工作還是更好的選擇?

  1. 商店的字符串(VARCHAR)作爲二進制數據(BLOB)
  2. 商店在某些加密格式,就像我們平時使用密碼做。
+0

你看過http://msdn.microsoft.com/en-us/library/cc278098(SQL.100).aspx – 2010-08-25 16:14:47

回答

2

第三種選擇可能是最合適的,就是根本不將這些值存儲在特定數據庫中。我認爲將它們存儲在其他地方可能更合適,因爲你可能不會加入敏感詞彙表。

否則,你可能想使用Conrad Frix的建議SQL Server的內置加密支持。

我這樣說的原因是因爲你說=和LIKE都必須適用於你的數據。當使用散列算法(如SHA/MD5/etc)對一個字符串進行散列處理時,結果將不服從人類語言LIKE語義。

如果完全相等(=)是足夠的(即您不需要能夠執行LIKE查詢),則可以使用加密函數來保護文本。但請記住,單向散列函數會阻止您獲取「未散列」字符串列表 - 如果您需要這樣做,則需要在可以解密的地方使用加密算法,如AES。

1

如果你使用rot13,那麼你仍然可以使用=和LIKE。這也適用於除SQL數據庫以外的任何存儲方法,如果防止偶然/意外的視圖(包括搜索引擎索引,如果列表是公開的)是非常重要的。

+0

爲什麼downvote? – 2010-09-19 19:34:24

+2

Upvoted。我認爲ROT13對於這個問題是一個非常簡單的解決方案。模糊(與加密相反)是合理的,因爲數據不是私密的,只是「冒犯性的」。根據OP的要求,ROT13很簡單,準標準,並保持與=和LIKE的兼容性。 – daveidmx 2010-10-07 14:22:24