2010-01-12 88 views
1

我打算通過SQL Server證書/(a)對稱密鑰來保存客戶的敏感信息。雖然現在數據是安全的,但證書和密鑰不可讀,我不知道應該在哪裏放鑰匙?有沒有最佳做法?唯一我能想到的是創建只能通過dbo訪問的表或專用登錄並保存在那裏。請給我你的寶貴意見。在SQL Server 2008中保留密碼的最佳方式是什麼?

謝謝, Ebe。

回答

1

散列密碼並存儲散列。如果用戶忘記密碼給他一個新的。 也給他一個選項來改變它。

也考慮實施openId註冊,所以你不必擔心登錄。

0

文件系統。例如,在只有您的應用程序運行的帳戶目錄下的配置文件可以讀取和/或寫入。這假設您當然信任您的數據中心人員。

另一方面,也許我沒有把你的問題說得很對。如果您只想將用戶密碼存儲在表格中,則應該理想地使用SHA-1對它們進行散列(使用salt)。不管您使用的數據庫權限如何,切勿以明文形式存儲密碼。

1

可以使用數據庫主密鑰對證書進行加密,並可以使用服務器主密鑰對數據庫主密鑰進行加密。使用DPAPI使用機器密鑰和/或帳戶密鑰對服務器主密鑰進行加密。這全部在Encryption Hierarchy中解釋。

需要訪問加密數據機密的自動化服務可以依靠此加密層次。數據在運行時使用正常訪問保護(訪問控制列表和SELECT的授予/拒絕/撤銷權限)進行保護,加密僅用於提供意外的介質折衷保護。意外的媒體妥協保護最終依賴於服務帳戶密碼和/或主機系統帳戶的安全性。

如果您在物理損失情況下需要更強大的保護,則必須使用SQL 2008並依賴EKM基礎結構(Extensible Key Management)創建存儲在物理設備上的主密鑰。這會增加安全性以防止媒體受到攻擊,因爲攻擊需要物理訪問存儲主密鑰的硬件加密模塊。

一個過程,確實不是需要訪問的祕密不需要任何這些。在這種情況下,訪問由客戶端應用程序提供的密碼獲得,並且這些密碼通常從用戶本身獲取。

如果您的系統屬於前一種類型(需要自動訪問機密並且不要求當前用戶輸入密碼的訪問密碼),那麼要使用ecryption層次結構(數據庫主密鑰,服務主密鑰)。如果應用程序屬於後者類型(它要求用戶輸入密碼以訪問用戶自己的特定機密),那麼正確的解決方案是使用用戶提供的密碼加密主對稱密鑰。

無處不在,我必須強調並重復,NOWHERE在這些方案中,是否有任何將密鑰保存到文件中的空間或保存到表中的主密碼。這只是一個主要的設計#FAIL。

+0

只是要清楚:我不會對如何存儲*密碼*,但**祕密**一般任何評論。像創建ASP成員資格提供者所需的用戶訪問密碼應作爲散列存儲,並且有什麼和應該如何散列的完全不同的討論。 – 2010-01-13 00:57:46

+0

謝謝,那就是我一直在尋找的東西。 – blah 2010-01-14 22:59:23

相關問題