程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 探討SQL Server 2005的安全策略

探討SQL Server 2005的安全策略

編輯:關於SqlServer

一、簡介

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的安全策略(圖一) 圖1.SQL Server的安全概念

就象以前的版本一樣,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'

MUST_CHANGE, CHECK_EXPIRATION = ON, CHECK_POLICY = ON

SQL Server 2005也支持終點認證以確保SQL Server在通過Windows Server 2003平台上的http.sys對外提供XML Web服務時進行安全的通訊。

三、 授權

在一個用戶被SQL Server成功地認證後,接下來進行的是授權過程以決定該用戶在數據庫上有哪些權限。在這一方面,SQL Server 2005又增加了兩個新特性:

用戶與模式分離開來

執行上下文

(一) 用戶和模式的分離

模式是一個容器—你可以在其中對數據庫對象(表,存儲過程,視圖,等等。)進行邏輯分組。這與.Net框架基類庫中的命名空間是一樣的。因為SQL Server中的一個模式也可能有一個所有者,因此你可以指令在一個給定模式中的每個對象都擁有一個相同的所有者。SQL Server 2000的實現模式並不很好:模式的名字與用戶的名字是相同的。因此,在模式和數據庫對象的所有者之間存在一個直接的關系(見圖2)。

探討SQL Server 2005的安全策略(圖二) 圖2.原來在SQL Server 2000中的用戶和模式關系

SQL Server 2000中的最大問題在於在一給定模式中的對象必須使用完全限定名(schema.objectname);但是,當你從數據庫中刪除一個表時,該對象的完全限定名會發生改變。因此,你對數據庫所作的改變將也會不幸地發生到客戶端的查詢中,而且有時這樣的改變將付出昂貴的代價。而在SQL Server 2005中,模式成為數據庫中一個單獨的擁有名字和所有者的本機對象。這樣的模式與用戶不再存在關系(見圖3)。

探討SQL Server 2005的安全策略(圖三) 

圖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


您正在看的SQLserver教程是:探討SQL Server 2005的安全策略。NER

EXECUTE AS CALLER是默認選項,這時一個存儲過程是以調用用戶的身份執行的。使用EXECUTE AS USER選項時,存儲過程則用你指定的用戶身份執行。當你使用EXECUTE AS SELF時,存儲過程用創建者的身份執行。最後,你可以使用EXECUTE AS OWNER來執行存儲過程,其身份是該對象的所有者。

四、 密碼學技術

當你在某一應用程序中使用密碼學技術時,你必須設法對密鑰(或是一非對稱算法的私人密鑰或是一對稱算法的共享密鑰)進行管理。SQL Server 2005提供了兩個選項來管理用戶密鑰:

用戶自己管理密鑰

由SQL Server為你管理密鑰

當你自己管理密鑰時,SQL Server用存在於數據庫中的一給定口令字來存儲對稱密鑰,這時你必須把該口令字保存在一個秘密的地方。而當由SQL Server來替你管理密鑰時,它使用服務主鍵和數據庫主鍵技術。圖4展示了這一概念背後的思想。

探討SQL Server 2005的安全策略(圖四)

圖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)打開它(這包括密鑰的解密),之後,你就可以把該密鑰用於你自己的加密目的。

探討SQL Server 2005的安全策略(圖五)

圖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將更加成熟起來並在大型企業開發領域發揮重要作用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved