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

◎科目:程式開發安全

在這一期的題目中,我們將為大家介紹協助保護SQL Server 2005的預存程序的內容,以及與SQL Server 2005管理的資料的加密和簽章有關的安全性功能,針對這兩個主題,我們設計了更多有關SQL Server 2005資料庫安全的題目,協助大家建立正確的資料庫安全觀念,確保所建立的資訊系統在資料儲存方面的絕對安全。

正確答案:

說明:
使用Create Procedure建立資料庫預存程序時加上with encryption語法可以將預存程序的內容加密,避免預存程序的內容曝光。以下就是利用with encryption語法將所建立的預存程序內容加密的範例:
CREATE PROCEDURE dbo.foo
AS
BEGIN
SELECT 'foo'
END
需注意經過加密處理的預存程序,無法經由SQL Server 2005提供的Management Studio管理工具檢視,也無法利用sp_helptext預存程序檢視內容,如果日後想要修改經過加密的預存程序的內容,您必須將預存程序的原始碼另外儲存一份在安全的地方,否則將無法修改。利用sp_helptext預存程序檢視上述的敘述建立的foo預存程序,將無法檢視foo預存程序原有的內容。以下就是利用sp_helptext預存程序檢視名稱為foo的預存程序的做法:
CREATE PROCEDURE dbo.foo
AS
BEGIN
SELECT 'foo'
END

正確答案:

說明:
SQL Server 2005支援的EncryptByPassphrase函數可以利用指定的密碼產生金鑰,再利用金鑰對資料進行加密,您可以利用SQL Server 2005支援的DecryptByPassphrase函數要還原經由EncryptByPassphrase函數加密過的資料。例如以下的範例便會利用EncryptByPassphrase函數對資料進行加密,再利用DecryptByPassphrase函數還原加密過的內容:
DECLARE @cleartext NVARCHAR(100) --宣告@cleartext變數
DECLARE @encryptedstuff NVARCHAR(100) --宣告@encryptedstuff變數
DECLARE @decryptedstuff NVARCHAR(100) --宣告@decryptedstuff變數
SET @cleartext = 'I''m hunting Rabbits' --填入欲加密的內容到@cleartext變數
SET @encryptedstuff = EncryptByPassPhrase('l00n3yTun3z', @cleartext) --利用密碼和EncryptByPassPhrase函數加密
--@cleartext變數的內容
SELECT @encryptedstuff --讀取@encryptedstuff變收的內容
SET @decryptedstuff = DecryptByPassphrase('l00n3yTun3z', @encryptedstuff) --利用密碼和 --EncryptByPassPhrase
--函數加密@cleartext變數的內容
SELECT @decryptedstuff --讀取@ decryptedstuff變收的內容
必須注意的是,SQL Server 2005提供的EncryptByPassphrase函數不會強制所指定的密碼必須符合複雜密碼(Complex Password)的規定,也就是密碼不一定要包含英文字母,阿拉伯數字,與特殊字元等三種成份。

正確答案:

說明:
SQL Server 2005支援的Create Certificate T-SQL敘述可以用來建立符合X.509標準的憑証,以及相關的金鑰組,並儲存在資料庫中。請注意使用Create Certificate敘述建立的私密金鑰的長度為1024位元,如果需要長度更長的金鑰,可以利用Create Certificate敘述從檔案或是經過簽署的組件匯入金鑰,不過所匯入的金鑰長度必須介於384位元~ 3456位元之間,而且必須是64位元的倍數。 利用Create Certificate敘述建立憑証時,私密金鑰會自動使用SQL Server 2005資料庫的Database Master Key加密,如果Database Master Key尚未建立,而且未指定密碼,則建立憑証的動作將不會成功。 以下的範例就會利用Create Certificate敘述建立名稱為Shipping04的憑証,指定憑証的有效期限到2009年10月31日為止,而且會利用指定的密碼保護憑証的私密金鑰:
USE AdventureWorks;
CREATE CERTIFICATE Shipping04
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'Sammamish Shipping Records',
EXPIRY_DATE = '10/31/2009';
GO
SQL Server 2005提供的內建函數在利用憑証對資料進行加密和簽章時並不會檢查憑証是否已經逾時,使用者必須自行檢查憑証的有效期限。除此之外,利用Create Certificate敘述建立憑証時必須擁有對資料庫執行CREATE CERTIFICATE敘述的權限。

正確答案:

說明:
DDL Trigger是一種特殊的Trigger,可以在應用程式或網頁對資料庫執行DDL敘述時自動啟動執行,執行資料庫管理的工作,例如執行稽核或是調整資料庫的操作。例如以下的DDL Trigger範例便會在資料庫的預存程序被修改時 ,將預存程序原有的內容備份到名稱為eventslog資料庫中:
create trigger backup_procs
on database
for create_procedure, alter_procedure, drop_procedure
as

set nocount on

declare @data xml
set @data = EVENTDATA()

insert into dbo.eventslog(eventtype, objectname, objecttype, sqlcommand, username)
values(@data.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)'),
@data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)'),
@data.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(25)'),
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'varchar(max)'),
@data.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)')
)
Go

正確答案:

說明:
上述的SQL敘述會建立一個名稱為safety的DDL Trigger,用來撤消刪除資料庫中的資料表的動作,確保資料庫不會遭受惡意刪除資料表(執行Drop Table敘述)的攻擊。

◎科目:資料庫

說明:
使用方式類似DBCC SQLPERF(LOGSPACE)。

說明:
使用方式類似DBCC SHRINKFILE('檔案名稱',EMPTYFILE )。

說明:
使用ALTER SCHEMA陳述式。


說明:
作法類似如下:
CREATE DATABASE AdventureWorks_1200 ON (NAME='AdventureWorks_Data',FILENAME='C:\ADV_SNAP.DAT')
AS SNAPSHOT OF AdventureWorks
 
 

說明:
作法類似如:
ALTER DATABASE AdventureWorks SET TRUSTWORTHY ON


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