2008.1月號-168期 程式開發安全自我評量解答  解答名師/王寧疆、楊志強

◎科目:程式開發安全

對機密資料執行加密和簽章是保護資料安全的重要技巧,對儲存到資料庫的機密資料也一樣,需要由程式本身或是由資料庫,對機密資料加上加密和簽章的保護,以確保資料的安全。在這一期的題目中,我們將為大家介紹協助程式執行儲存資料的T-SQL敘述與負責儲存程式用的資料的SQL Server 2005提供的資料加密和簽章功能。

正確答案:

說明:
SQL Server 2005提供的Database Master Key是用來執行對稱式加密的金鑰,其主要的用途是用來加密SQL Server 2005使用的憑証和非對稱式加密用的私密金鑰。Database Master Key本身會經由Triple DES加密演算法加密處理,並加上使用者的密碼進行保護。以下就是為名稱為AdventureWorks的資料庫建立Database Master Key,並使用23987hxJ#KL95234nl0zBe當做使用者密碼保護所建立的Database Master Key的例子:
USE AdventureWorks;
 CREATE MASTER KEY ENCRYPTION BY PASSWORD = '23987hxJ#KL95234nl0zBe';
 GO
 

正確答案:

說明:
Service Master Key是SQL Server 2005資料加密與簽章機制中最上層的金鑰,負責用來加密其他加密與簽章場合使用的金鑰。Service Master Key預設會經由Windows提供的Windows Data Protection API(DPAPI)加密功能,搭配Local Machine Key進行加密,而且只能被建立Service Master Key的Windows服務帳戶或是可以取得Windows服務帳戶及密碼的執行身分開啟。

正確答案:

說明:
EncryptByKey函數與DecryptByAsymKey函數能夠使用對稱式加密演算法對機密資料進行加密與解密,例如我們可以使用EncryptByKey函數與DecryptByAsymKey函數對儲存在資料庫中的員工記錄的薪資欄位進行加密,確保員工私密的薪資資訊不致於外洩。例如以下的例子就會利用EncryptByKey函數將員工的社會安全號碼加密之後存到名稱為NationalIDNumber的欄位中:
USE AdventureWorks;
GO
-- 開啟用來加密的對稱式金鑰
OPEN SYMMETRIC KEY SSN_Key_01
DECRYPTION BY CERTIFICATE HumanResources037;
-- 利用名稱為SSN_Key_01的金鑰將NationalIDNumber欄位的內容加密後並儲存到名稱為
--. EncryptedNationalIDNumber.的欄位中
UPDATE HumanResources.Employee
SET EncryptedNationalIDNumber = EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber);
GO

正確答案:

說明:
EncryptByAsymKey函數與DecryptByAsymKey函數可以用來對機密資料進行非對稱式加密,因為非對稱式加密演算法的執行效率和對稱式加密演算法的執行效率比起來要差很多,所以只適合用來對少量的資料加密。基本上大量資料加密適合使用對稱式加密法,而少量資料的加密,例如加密對稱式加密法使用的金鑰,就很適合使用非對稱式加密法。以下的範例會使用EncryptByAsymKey函數,搭配名稱為JanainaAsymKey02的非對稱式加密金鑰,對存放在@cleartext參數的內容進行加密,並將加密後的結果存入名稱為ProtectedData04的資料表中:
INSERT INTO [AdventureWorks].[Sales].[ProtectedData04]
values( N'data encrypted by asymmetric key ''JanainaAsymKey02''', EncryptByAsymKey(AsymKey_ID('JanainaAsymKey02'), @cleartext) )
GO

正確答案:

說明:
EncryptByCert函數與DecryptByCert函數可以利用存放在憑証中的公開金鑰對機密資料進行加密,使用EncryptByCert函數加密後的結果可以被加密用的公開金鑰成對的私密金鑰解密成加密前的內容,其加密與解密的執行效能比使用對稱式加密法對機密資料進行加密與解密要慢很多,所以不適合對大量資料進行加密。以下的範例會利用存放在名稱為JanainaCert02的憑証中的公開金鑰對名稱為@cleartext的參數的內容進行加密,並把加密後的內容儲存到名稱為ProtectedData04的資料表中:
INSERT INTO [AdventureWorks].[ProtectedData04]
values( N'data encrypted by certificate ''Shipping04''', EncryptByCert(Cert_ID('JanainaCert02'), @cleartext) );
GO

◎科目:資料庫

說明:
資料庫主要金鑰是用來保護憑證與非對稱金鑰,備份資料庫主要金鑰可以使用以下的方式:
BACKUP MASTER KEY TO FILE = 'c:\bak\master.key'
ENCRYPTION BY PASSWORD = 'Pa$$w0rd'

說明:
A與D使用方法類似:
SELECT CONVERT(DATETIME,'2008/1/17'),
CAST('2008/1/17' AS DATETIME)

說明:
其中OPENXML函數是將XML資料轉換成關聯式資料。


說明:
SQL SERVER 2005已經不支援MULTI-PROTOCOL。
 

說明:
使用方法類似SET NOCOUNT ON,取消抑制可以使用SET NOCOUNT OFF。


Copyright© FLAG INFORMATION CO., LTD. 旗訊科技(股)公司. All rights reserved. 本站圖文著作權所有 未經授權 不得任意轉載使用