一、簡介
SQL Server 2005是繼SQL Server 2000之後的又一次重大成功。單從安全方面看,它在認證和授權方面比以往都有了大幅度的提高;同時,它還提供了本機加密支持—能夠實現比以往其它版本更安全的數據庫應用程序設計和實現。
“自古以來”,軟件安全是一個相當重要的問題。Windows 2003 Server是微軟第一個“缺省安全”產品。缺省情況下,整個服務器是被鎖定的,所以,你必須自己去激活每個你想要使用的服務。因此,一個攻擊者必須花費相當的代價才能攻破該系統。
與此相同的策略被應用到SQL Server 2005中。缺省地,整個數據庫服務器也被鎖定,這樣每個服務和特性必須通過手工激活才能使用。由於這個原因,SQL Server與SQL Server表面區域配置工具一同發行—通過這個配置工具,你可以定義在SQL Server的安裝過程中哪些服務和特性將被激活。
本文我們主要分析一下在新版的SQL Server 2005中,其在安全方面作出的重大改進。
二、 認證
認證是你成功存取SQL Server的第一步。下圖1展示了這種安全概念背後的相應模型。
就象以前的版本一樣,SQL Server 2005也支持Windows和混合的認證方式。由於安全原因,微軟特別推薦使用Windows認證方式。在這種方式下,安全檢查是針對於活動目錄進行的;但是,這樣的缺點是,用戶和數據庫服務器必須駐留在相同的活動目錄域內。
當你使用SQL Server混合認證方式時,由SQL Server負責處理登錄委任狀。這種配置在有些時候非常重要;但是,隨之而來的缺限是你無法使用諸如活動目錄等所提供的底層安全架構。
SQL Server 2005新增的一項功能就是,當你使用Windows認證模式時,它能夠對認證過程的口令字和注銷策略進行管理。你可以管理帳戶約束、如強口令字或終止日期等。然而必須注意,只有在SQL Server 2005安裝到Windows 2003 Server上時你才能使用這些特性。另外,這些功能相應的API在其它Windows平台上是無法使用的。
在你為一個帳戶設置口令時,可以使用下列限制:
口令的長度必須是至少6個字符(SQL Server支持從1到128個字符的口令長度)。
口令必須使用不同類型的字符(大寫,小寫,數字,特殊的符號等等)。
口令中不能包含象“Admin”,“Administrator”,“PassWord”,“sa”或者“sysadmin”這樣的短語。
除這些限制以外,一個口令字不能為空。
當你建立一個新的登錄時,你可以通過T-SQL語句CREATE LOGIN使用擴展的CHECK_EXPIRATION和CHECK_POLICY來實現。CHECK_EXPIRATION能夠控制登錄的終止日期,而CHECK_POLICY用於激活上面描述的口令策略機制。新的選項MUST_CHANGE能夠讓用戶在第一次登錄時可以改變他/她的口令(SQL Server 2005 Beta 2版不支持這個特征)。列表1展示了使用這些新選項的部分代碼:
列表1
CREATE LOGIN Paul WITH PASSWord='P@ssw0rd1'SQL Server 2005也支持終點認證以確保SQL Server在通過Windows Server 2003平台上的http.sys對外提供XML Web服務時進行安全的通訊。
MUST_CHANGE, CHECK_EXPIRATION = ON, CHECK_POLICY = ON
SQL Server 2000中的最大問題在於在一給定模式中的對象必須使用完全限定名(schema.objectname);但是,當你從數據庫中刪除一個表時,該對象的完全限定名會發生改變。因此,你對數據庫所作的改變將也會不幸地發生到客戶端的查詢中,而且有時這樣的改變將付出昂貴的代價。而在SQL Server 2005中,模式成為數據庫中一個單獨的擁有名字和所有者的本機對象。這樣的模式與用戶不再存在關系(見圖3)。
圖3.在SQL Server 2005中用戶和模式分離開來現在,你能在數據庫中刪除和添加新用戶而不用修改軟件(客戶端和數據庫端都不用)。而且,你能把權限賦給一個模式以實現對該模式中對象的存取。列表2展示了SQL Server 2005中的模式用法。
列表2
USE master
GO
-- 建立數據庫登錄
CREATE LOGIN Paul WITH PASSWord='p@ssw0rd1'
CREATE LOGIN Mary WITH PASSWord='p@ssw0rd1'
USE TestDatabase
GO
CREATE USER Paul FOR LOGIN Paul
CREATE USER Mary FOR LOGIN Mary
--創建一新模式
CREATE SCHEMA SalesData
-- 在模式“SalesData”中創建一新表
CREATE TABLE SalesData.SalesPromotion
( ID int, [Name] varchar(255))
GRANT ALL ON SalesData TO Paul
ALTER USER Paul WITH DEFAULT SCHEMA = SalesData
GRANT SELECT ON SCHEMA::SalesData TO MARY
(二) 執行上下文
SQL Server 2005的另外一個新特征是允許你改變一個存儲過程的執行上下文。你可以通過用EXECUTE AS語句來改變執行上下文進而控制這些數據庫對象是以哪些用戶身份執行的。EXECUTE AS語句支持下列選項:
EXECUTE AS CALLER
EXECUTE AS USER='user name'
EXECUTE AS SELF
EXECUTE AS OW
圖4.SQL Server 2005中的服務和數據庫主鍵
正如你所見,這個服務主鍵處於服務器級別上。該鍵在SQL Server安裝過程中被創建並且通過數據保護API(DPAPI)保護起來。用幾個T-SQL語句,你就能把服務主鍵復制到一個文件中並能夠從文件中恢復回去。
數據庫主鍵處於數據庫級上並且必須通過administrator來顯式地創建。可以通過口令或服務主鍵來對該主鍵進行加密。列表3說明了如何創建數據庫主鍵:
列表3
CREATE MASTER KEY ENCRYPTION BY PASSWord='p@ssw0rd1'
一旦你創建了數據庫主鍵,你就擁有了下列選項:
用對稱密鑰加密
用非對稱密鑰加密
用證書加密
你可以用T-SQL語句“CREATE SYMMETRIC KEY”來創建一對稱密鑰。這樣的加密是通過一存儲在表sys.symmetric_keys中的口令字或數據庫主鍵進行的。為了使用一對稱密鑰,你必須先用語句OPEN KEY(見圖5)打開它(這包括密鑰的解密),之後,你就可以把該密鑰用於你自己的加密目的。
圖5.用對稱密鑰進行加密
對稱密鑰的優點在於它的高性能—它大約比同樣的非對稱密鑰快1,000到10,000倍。缺點是加密和解密都使用一把密鑰,而且雙方都必須知道該密鑰。你可以用語句“CREATE ASYMMETRIC KEY”來創建一非對稱密鑰。這樣的密鑰還可以通過一口令字或數據庫主鍵來加密。列表4告訴你如何創建一非對稱密鑰:
列表4
--用口令加密
CREATE ASYMMETRIC KEY MyKeyName AUTHORIZATION User1
WITH ALGORITHM = RSA_512
ENCRYPTED BY PASSWord = 'p@ssw0rd1'
--用數據庫主鍵加密
CREATE ASYMMETRIC KEY MyKeyName AUTHORIZATION User1
WITH ALGORITHM = RSA_512
一非對稱密鑰總是被存儲在表sys.asymmetric_keys中。在你創建該密鑰後,你能使用函數EncryptByAsmKey來加密數據而用DecryptByAsmKey來解密被加密的數據。列表5展示了這兩個函數的使用:
列表5
DECLARE @EncryptedStuff varchar(1000)
SELECT @EncryptedStuff = EncryptByAsmKey(AsymKey_ID('MyKeyName'),
'My secret message')
SELECT @EncrytedStuff
SELECT CAST(DecryptByAsmKey(AsymKey_ID('MyKeyName'), EncryptedStuff)
AS VARCHAR)
最後,你還可以使用證書來加密數據,或者是一個現有證書—把它導入進數據庫服務器中即可或是一個通過T-SQL語句“CREATE CERTIFICATE”創建的新證書。一個證書本身也能通過一口令字或通過數據庫主鍵被加密。列表6顯示出這兩種可能性:
-- 用口令加密
CREATE CERTIFICATE MyCertificateName AUTHORIZATION User1
WITH Subject 'My Subject',
EXPIRY_DATE = '12/31/2006',
ENCRYPTION_PASSWord = 'p@ssw0rd1'
-- 用數據庫主鍵加密
CREATE CERTIFICATE MyCertificateName AUTHORIZATION User1
WITH Subject 'My Subject'
五、 小結
本文通過一些片斷示例,分析了SQL Server 2005在安全方面提供的新功能。尤其應注意到,它在密碼功能上作了很大改進。SQL Server 2005將更加成熟起來並在大型企業開發領域發揮重要作用。