Sql-Server

SQL Server 加密/解密

  • December 8, 2010

作為災難恢復測試的一部分,我試圖確保我能夠重新創建我的數據庫並且仍然能夠解密以前加密的字元串。

所以這就是我正在做的測試……

  1. 創建數據庫證書。
  2. 將證書和私鑰備份到磁碟。
  3. 創建由證書加密的對稱密鑰。
  4. 使用 EncryptByKey 將“Hello World”加密為十六進製字元串。保留此加密字元串以供下面使用。
  5. 使用 DecryptByKey 將十六進製字元串解密為“Hellow World”。

這一切都很好,但後來我正在嘗試這個……

  1. 刪除密鑰和證書。
  2. 從備份的證書重新創建證書。
  3. 像以前一樣創建一個新的對稱密鑰。
  4. 嘗試解密以前加密的字元串,但它不起作用。

我可以讓它工作的唯一方法是在創建對稱密鑰時指定 KEY_SOURCE 和 IDENTITY_VALUE 但 MSDN 說 IDENTITY_VALUE 用於創建“臨時密鑰”,因此不確定是否使用它。

對此有什麼想法嗎?

不能有要求使用者提供對稱密鑰材料來恢復數據的災難恢復計劃。對稱密鑰與數據庫中的數據一起儲存,恢復數據的災難恢復計劃將在此過程中恢復密鑰。

所有加密方案都使用從使用者提供的工件開始的密鑰層次結構:密碼或外部密鑰。這用於依次加密其他密鑰,以簡化管理和操作:1)允許輕鬆更改密鑰而無需重新加密所有數據,以及 2)允許使用快速對稱密鑰來加密大量數據。恢復後唯一需要的是訪問層次結構頂部主密鑰的密碼。通過刪除用於加密數據的密鑰進行的測試基本上是無意義的。

使用已知密鑰材料 (KEY_SOURCE) 加密數據,您走上了一條非常糟糕且危險的道路。您的密鑰來源很可能會在腳本和其他儲存密鑰材料(電子郵件、配置文件等)的媒體中洩漏,因此在實踐中,您最好不要加密任何東西,因為您的密鑰被太多人知道​​,因此無用.

引用自:https://serverfault.com/questions/210406