標籤:style http io color ar os 使用 sp strong
前言:
在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),它對整個資料庫進行加密,而不需要修改任何訪問它的應用程式。資料、記錄檔和相關的Database Backup都是加密的。假如資料庫被偷,如果沒有資料庫加密金鑰(DEK)是不能訪問資料的。
一、通過複雜密碼(PassPhrase)加密
對於不涉及認證及密鑰的應急的資料加密,可以直接基於使用者提供的密碼來加密和解密資料。複雜密碼(PassPhrase)是允許存在空格的密碼。這個PassPhrase不會儲存在資料庫中,因而也就意味著不會被使用儲存的系統資料“破解”。同時,可以使用空格建立一個長的、易於記憶的句子來加密和解密敏感性資料。
我們需要瞭解的一對函數是
ENCRYPTBYPASSPHRASE(http://technet.microsoft.com/zh-cn/library/ms190357.aspx)
DECRYPTBYPASSPHRASE(http://technet.microsoft.com/zh-cn/library/ms188910.aspx)
這一對函數必須使用相同的參數。
我們看一個樣本:
--------加密函數-----------
CREATE FUNCTION dbo.EncryptByPassPhrasePwd(@password nvarchar(50))
RETURNS varbinary(max)
AS
BEGIN
declare @pwd varbinary(max) SELECT @pwd = EncryptByPassPhrase(
‘1234567‘,
@password)
return @pwd
END
---------解密函數----------
CREATE FUNCTION dbo.DecryptByPassPhrasePwd(@password varbinary(max))
RETURNS nvarchar(max)
AS
BEGIN
declare @pwd nvarchar(max) SELECT @pwd =CAST( DecryptByPassPhrase(‘1234567‘,@password) as nvarchar(max))
return @pwd
END
注意:123456 是用於產生對稱金鑰的複雜密碼
select dbo.EncryptByPassPhrasePwd(‘test11‘) as result
select dbo.DecryptByPassPhrasePwd(0x010000004779C35F96DACC0EC6A8C518E186D203B1A336EE5B8A51B4271B54F56F516ECE) as result
至尊箭神:http://www.zhizunjianshen.com/
Sql Server簡單加密與解密 【轉】