天天看點

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

SQL Server 2008中SQL應用系列--目錄索引

導讀:本文主要涉及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

*/

/************

想知道原文本的内容,使用以下語句:

[email protected]

**********************/

SELECT CAST(DecryptByPassPhrase(

'My Password Used To Encrypt This String in 2008.',

MySecret) as varchar(max))

FROM #SecretInfo

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

注意:

1、使用通行短語進行加密資料,不用擔心sysadmin伺服器角色成員讀取資料(在後面文章會看到,伺服器角色成員sysadmin擁有讀取其他形式的加密資料的内在權限。

2、假定沒有将密碼存儲在表中或在任何子產品(存儲過程、觸發器等)中使用密碼,加密的資料将防止從資料庫備份被偷竊或在SQL Server執行個體中的資料庫中滲透。如果通行短語沒有正确共享,資料就可以被解密。

邀月注:本文版權由邀月和CSDN共同所有,轉載請注明出處。

助人等于自助!   [email protected]