數(shù)據(jù)庫管理:SQL Server 2008安全性探討
Ruby 發(fā)表于:12年09月06日 11:18 [轉載] DOIT.com.cn
固定數(shù)據(jù)庫角色
每個SQL Server數(shù)據(jù)庫都有一系列固定數(shù)據(jù)庫角色,可用于在必要時把權限委托給用戶。和固定服務器角色一樣,對于固定數(shù)據(jù)庫角色來說,唯一可以改變的就是成員資格。用戶定義的數(shù)據(jù)庫角色對管理權限和對數(shù)據(jù)庫中的資源的訪問提供了更多的控制。在使用基于角色的安全模型時,可能京城發(fā)現(xiàn)內置主體(比如 Windows中的組或SQL中的角色)提供了過得uod訪問權限,或者沒有提供足夠的權限。在這種情況下,可以創(chuàng)建用戶定義的角色,控制整個一組用戶對安全對象的訪問。
- USE AdventureWorks2008 CREATE ROLE SalesStaff AUTHORIZATION Carol; GO
- USE AdventureWorks2008 ALTER ROLE SalesStaff WITH NAME=SalesStaffRole; GO
- USE AdventureWorks2008 DROP ROLE SalesStaffRole; GO
- USE AdventureWorks2008 EXEC sp_addrolemember 'db_datareader','Carol'; GO
- USE AdventureWorks2008 EXEC sp_droprolemember 'db_datareader','Carol'; GO
另外一種可以用來幫助保護數(shù)據(jù)庫環(huán)境的角色是應用程序角色。應用程序角色和標準的角色類型截然不同,他們沒有成員,可以而且應該被設置為使用密碼進行身份驗證。當運行一個特定的應用程序的所有用戶必須采用同樣的數(shù)據(jù)訪問時,通常使用應用程序角色。應用程序可以不需要提示用用提供用戶名和密碼就實例化應用程序角色,從而避免了依賴于個人用戶是否擁有適當?shù)脑L問權限讓應用程序正常工作。
- USE AdventureWorks2008 CREATE APPLICATION ROLE SalesApp WITH PASSWORD='P@www1rd',DEFAULT_SCHEMA=Sales; GO
- USE AdventueWorks2008 GO
- DECLARE @cookie varbinary(8000);
- EXEC sp_setapprole 'SalesApp','P@ssw0rd',@fCreateCookie=true,@cookie=@cookie OUTPUT; GO
- SELECT USER_NAME();
一旦執(zhí)行了上述腳本,該連接執(zhí)行的所有活動都將在該應用程序角色下操作。當關閉連接時,應用程序角色會話也終止。通過ALTER APPLICATION ROLE語句,可以更改應用程序角色的名稱、密碼和默認架構。
- USE AdventureWorks2008 ALTER APPLICATION ROLE SalesApp WITH NAME=OrderEntry,PASSWORD='newP@ss0rd'; GO
- USE AdventureWorks2008 DROP APPLICATION ROLE OrderEntry; GO
權限
在對象或資源上定義權限的語句會定義一個權限狀態(tài)、一個操作、獎項哪個對象應用權限和操作,以及權限和動作將應用于哪個安全主體。首先,需要知道基本上有三種權限狀態(tài):GRANT,GRANT_W_GRANT和DENY。用于控制權限狀態(tài)的三個命令為GRANT,REVOKE和DENY。
SQL Server 2008使用一個分層的安全模型,允許指定可在服務器、數(shù)據(jù)庫、架構或者對象級別授予的權限。也可以在表和視圖內為選定列指派權限。在保護數(shù)據(jù)庫服務器時,應使用兩個關鍵策略:在授權時應當采用的第一個策略為”最小特權原則“,這一策略規(guī)定只向用戶提供適當?shù)臋嘞捱M行操作。通過對數(shù)據(jù)庫環(huán)境做出這樣嚴格的限制,可以提供一個能最小化服務器的受攻擊面,同時又維護運行功能的解決方案。第二個策略是深度防御。好的安全實現(xiàn)方案應在數(shù)據(jù)庫的所有層上提供安全性。這可能包括針對客戶機和服務器之間的通信采用IPSec或SSL,在身份驗證服務器上使用強密碼加密以及在表或視圖中配置列級權限。