SQL Server 2008中的代碼安全(三):通過PassPhrase加密

作者: 邀月  來源: 博客園  發布時間: 2011-03-15 11:34  閱讀: 1003 次  推薦: 0   原文鏈接   [收藏]  
摘要:本文主要涉及EncryptByPassPhrase和DecryptByPassPhrase函數進行通行短語(PassPhrase)加密。

  導讀:本文主要涉及EncryptByPassPhrase和DecryptByPassPhrase函數進行通行短語(PassPhrase)加密。

  前言

  在SQL Server 2005和SQL Server 2008之前。如果希望加密敏感數據,如財務信息、工資或身份證號,必須借助外部應用程序或算法。SQL Server 2005引入內建數據加密的能力,使用證書、密鑰和系統函數的組合來完成。

  與數字證書類似。SQL Server 證書包括公鑰和私鑰這一對密鑰,它們都用來加密和解密數據。SQL Server也擁有創建非對稱密鑰和對稱密鑰對象的能力。非對稱密鑰(asymmetric key)與證書相似,公鑰用來加密數據庫,私鑰用來解密數據。非對稱密鑰和證書都提供了強大的加密強度。但在完成復雜的加密|解密過程中具有更多的性能開銷。更適合對大量數據進行加密,且具有較低性能開銷的解決方案是對稱密鑰(symmetric key),它是對相同數據進行加密和解密的一個密鑰。

  SQL Server允許將這些加密能力放到加密層次結構中。當安裝了SQL Server后,在數據庫master中創建名為服務主密鑰的服務器級別證書,并將其默綁定到SQL Server服務賬號登錄名。服務主密鑰用來加密所有其他數據庫證書和創建在SQL Server實例中的密鑰。另外,你也可以在用戶數據庫中創建數據庫主密鑰(Database Master Key),它可以用來加密數據庫證書和密鑰。

  在SQL Server 2008中,微軟引入了透明數據加密(TDE),它對整個數據庫進行加密,而不需要修改任何訪問它的應用程序。數據、日志文件和相關的數據庫備份都是加密的。假如數據庫被偷,如果沒有數據庫加密密鑰(DEK)是不能訪問數據的。本文及后面幾篇文章將會舉例說明。

  在SQL Server 2008中,還引入了對可擴展密鑰管理(EKM)的支持,也就意味著SQL Server可以使用硬件安全模塊(HSM)來存儲和和管理加密密鑰。HSM可以減少數據和實際的加密密鑰耦合。

  此部分內容共分六篇文章:

  1、通過PassPhrase加密

  2、主密鑰

  3、非對稱密鑰加密

  4、對稱密鑰加密

  5、證書加密

  6、透明數據加密

  一、通過通行短語(PassPhrase)加密

對于不涉及證書及密鑰的應急的數據加密,可以直接基于用戶提供的密碼來加密和解密數據。通行短語(PassPhrase)是允許存在空格的密碼。這個PassPhrase不會存儲在數據庫中,因而也就意味著不會被使用存儲的系統數據“破解”。同時,可以使用空格創建一個長的、易于記憶的句子來加密和解密敏感數據。

  我們需要了解的一對函數是ENCRYPTBYPASSPHRASE(http://technet.microsoft.com/zh-cn/library/ms190357.aspx)和DECRYPTBYPASSPHRASE(http://technet.microsoft.com/zh-cn/library/ms188910.aspx

這一對函數必須使用相同的參數。

我們看一個示例:

 
use DemoDB2008r2
go

-- Table used to store the encrypted data
-- for the purposes of this recipe
CREATE TABLE #SecretInfo
(MySecret
varbinary(max) NOT NULL)
GO
INSERT #SecretInfo (MySecret)
SELECT EncryptByPassPhrase(
'My Password Used To Encrypt This String in 2008.',
'我把公司的服務器數據庫密碼記在那個綠色的小本子上了。')

SELECT MySecret FROM #SecretInfo

/*
通常的查詢結果:
0x01000000CCBC800C6B5CECE3F211FB975C2F8B681CC8301DDE74CF783C6A593
16C2BAC08D568151FD573E2FDE01C800805C8D1D5984727DEE95040C1FB604003
A3EFDD0444CE72D7E505D1A4

*/
 
/************
想知道原文本的內容,使用以下語句:
--------3w@live.cn
*********************
*/

SELECT CAST(DecryptByPassPhrase(
'My Password Used To Encrypt This String in 2008.',
MySecret)
as varchar(max))
FROM #SecretInfo

邀月工作室

  注意:

  1、使用通行短語進行加密數據,不用擔心sysadmin服務器角色成員讀取數據(在后面文章會看到,服務器角色成員sysadmin擁有讀取其他形式的加密數據的內在權限。)

  2、假定沒有將密碼存儲在表中或在任何模塊(存儲過程、觸發器等)中使用密碼,加密的數據將防止從數據庫備份被偷竊或在SQL Server實例中的數據庫中滲透。如果通行短語沒有正確共享,數據就可以被解密。

  相關文章:SQL Server 2008中的代碼安全(一):存儲過程加密與安全上下文

                        SQL Server 2008中的代碼安全(二):DDL觸發器與登錄觸發器

                        SQL Server 2008中的代碼安全(四):主密鑰

                        SQL Server 2008中的代碼安全(五):非對稱密鑰加密

0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()