摘要:在數據庫系統里面,有大量敏感信息并且被不同用戶共享,需要對他們安全保護,防止未經授權的訪問。訪問控制作為一種強有力的保護系統的方式,能保證信息的完整性和機密性。此文先介紹基于角色的訪問控制機制,然后在SQL Server平臺上應用基于角色的訪問控制策略,以保證數據庫的安全。
關鍵詞:數據庫安全;基于角色的訪問控制;角色
中圖分類號:TP312文獻標識碼:A文章編號:1009-3044(2008)25-1375-03
Role-Based Access Control Application in SQL Server
CHEN Hong-mei, GE De-jiang
(Three Gorges Vocational College of Electric power,Yichang 443002, China)
Abstract: In database system,need for protecting information from unauthorized access has lead to more attention in the field of information security, since the system maintains sensitive information to be shared by multipule users. Access control mechanisms are powerful means to ensure information confidentiality and integrity. in this paper, Role-Based Access Control and its character is briefly present firstly,then in SQL SERVER apply Role-Based Access Control policy to ensure database security.
Key words: database security; Role-Based Access Control; role
1 引言
數據庫安全的主要目的是通過各種安全控制機制來保證數據庫的保密性、完整性和可用性。數據庫的根本目標是確保只有授權的用戶才能在授權范圍內進行授權的操作[1]。訪問控制技術應用最廣泛并且最有效。訪問控制策略一般有三種:自主型訪問控制方法、強制型訪問控制方法和基于角色的訪問控制方法(RBAC)。其中,自主式太弱,強制式太強,二者工作量大,不便于管理。而基于角色的訪問控制,可以有效克服前兩種訪問控制技術的不足,降低授權管理的復雜性,提高授權的靈活性。因此本文以SQL Server為平臺,對基于角色的訪問控制加以應用。
2 基于角色的訪問控制
RBAC(Role-Based Access Control)是近年來在信息安全領域訪問控制方面的研究熱點和重點。基于角色的訪問控制RBAC作為一種靈活和直觀的訪問控制技術在20世紀90年代迅速發展起來,RBAC通過引入角色的新概念來實施訪問控制策略。不同的角色和它所應具有的權限許可互相聯系,用戶作為某些角色的成員,獲得角色所擁有的權限。角色可以根據實際的單位或組織的不同工作職能和權限來劃分,依據用戶所承擔的不同權利和義務來授權相應的角色,對于一個存在大量用戶和權限的權限分配系統來說,從用戶到角色的管理,簡化了權限分配的復雜性,提高了安全管理的效率和質量。
美國國家標準與技術研究院標準RBAC模型由4個部件模型組成,這4個部件模型分別是基本模型RBAC0(Core RBAC)、角色分級模型RBAC1(Hierarchal RBAC)、角色限制模型RBAC2(Constraint RBAC)和統一模型RBAC3(Combines RBAC)[2]。RBAC0模型如圖1所示。
■
圖1 RBAC0
RBAC0定義了能構成一個RBAC控制系統的最小的元素集合。核心RBAC的核心概念包括五個基本的靜態集合:用戶集(Users),角色集(Roles),操作集(Operations,0PS),對象集(Objects,OBS),權限集(Permissions,PRMS)和一個運行過程中動態維護的會話集(sessions)。這些集合稱為RBAC的組件。組件及其之間關系描述如圖1所示。
在RBAC之中,權限被賦予角色,而不是用戶,當一個角色被指定給一個用戶時,此用戶就擁有了該角色所包含的權限。會話sessions是用戶與激活的角色集合之間的映射。RBAC0與傳統訪問控制的差別在于增加一層間接性帶來了靈活性,RBAC1、RBAC2、RBAC3都是先后在RBAC0上的擴展。角色是一個強大的工具,使您得以將用戶集中到一個單元中,然后對該單元應用權限。對一個角色授予、拒絕或廢除的權限也適用于該角色的任何成員。可以建立一個角色來代表單位中一類工作人員所執行的工作,然后給這個角色授予適當的權限。當工作人員開始工作時,只須將他們添加為該角色成員,當他們離開工作時,將他們從該角色中刪除。而不必在每個人接受或離開工作時,反復授予、拒絕和廢除其權限。權限在用戶成為角色成員時自動生效。
如果根據工作職能定義了一系列角色,并給每個角色指派了適合這項工作的權限,則很容易在數據庫中管理這些權限。之后,不用管理各個用戶的權限,而只須在角色之間移動用戶即可。如果工作職能發生改變,則只須更改一次角色的權限,并使更改自動應用于角色的所有成員,操作比較容易。
SQL Server提供了一些預先定義的用戶角色,它們具有一些特定的管理權限。你還可以為你的特定環境需求創建定制的角色。在你的數據庫上分配權限給這些角色,然后根據人們工作職責的變化從這些角色中添加和刪除用戶/群。
3 SQL Server 中的基于角色的安全機制
數據庫系統的安全性是每個數據庫管理員都必須認真考慮的問題。SQL Server為維護數據庫系統的安全性提供了完善的管理機制和簡單而豐富的操作手段。在實際應用中,用戶可以根據系統對安全性的不同需求采用合適的方式來完成數據庫系統安全體系的設計。SQL Server的安全機制可以劃分為4個等級。
(1) 客戶機操作系統的安全性
(2) SQL Server服務器的安全性
(3) 數據庫的安全性
(4) 數據庫對象的安全性
在用戶使用客戶計算機通過網絡實現對SQL Server的訪問時,用戶首先要獲得客戶計算機操作系統的使用權 。操作系統的安全性一般是操作系統管理員或網絡管理員的任務。由于SQL Server采用了集成Windows NT網絡安全性機制,所以使得操作系統安全性的地位得到提高,但同時也加大了管理數據庫系統安全性和靈活性的難度。
SQL Server的服務器級安全性建立在控制服務器登錄賬號和密碼的基礎上。SQL Server采用了集成Windows NT登錄和標準SQL Server登錄兩種方式。無論是使用哪種登錄方式,用戶在登錄時提供的登陸賬號和密碼,決定了用戶能否獲得SQL Server的使用權,以及獲得訪問權之后,用戶在訪問SQL Server進程時可以擁有的權利。管理和設計合理的登錄方式,是DBA的重要任務。SQL Server事先設計了許多固定服務器的角色,用來為具有服務器管理員資格的用戶分配使用權利。擁有固定服務器角色的用戶可以擁有服務器級的管理權限。
在用戶通過SQL Server服務器的安全性檢驗以后,將直接面對不同的數據庫入口,這是用戶將接受的第三次安全性檢驗。在建立用戶的登錄帳號信息時,SQL Server提示用戶選擇默認的數據庫。以后用戶每次連接上服務器后,都會自動轉到默認的數據庫上。對任何用戶來說,master數據庫的門總是打開的。如果在設置帳號時沒有指定默認的數據庫,則用戶的權限將局限在master數據庫以內。默認的情況下,數據庫的擁有者可以訪問該數據庫的對象,可以分配訪問權給別的用戶,以便讓別的用戶也擁有針對該數據庫的訪問權,在SQL Server中并不是所有的權利都可以自由轉讓和分配。
SQL Server在服務器和數據庫級的安全性級別上都設置了角色。角色是用戶分配權限的單位。SQL Server允許在數據庫級上建立新的角色,然后為角色賦予多個權限,然后再通過角色將權限賦予給SQL Server的用戶。SQL Server不允許用戶建立服務器級的角色。
數據庫對象的安全性是核查用戶權限的最后一個安全等級。在創建數據庫對象的時候,SQL Server將自動把該數據庫對象的所有權利賦予該對象的創建者。對象的擁有者可以實現該對象的完全控制。默認情況下,只有數據庫的擁有者可以在該數據庫下操作。當一個非數據庫擁有者想訪問數據庫里的對象時,必須事先由數據庫的擁有者賦予該用戶對指定對象的執行特定操作的權限。一般來說,為了減少管理的開銷,在對象級安全管理上應該在大多數場合賦予數據庫用戶以廣泛的權限,然后再針對實際情況在某些敏感的數據上實施具體的訪問權限制。
4 在學生成績管理系統中的應用
在 SQL Server 2000中,用戶可屬于多個角色。
以下腳本說明登錄、用戶和角色的添加,并為角色授予權限。
USE master
GO
首先創建登錄。這里映射windows用戶john、sarah、betty、ralph、diane為數據庫服務器的登錄用戶,并且默認登錄數據庫為courses。這是實現服務器級的安全性。
sp_grantlogin 'CHM\\John'
GO
sp_defaultdb 'CHM\\John', 'courses'
GO
sp_grantlogin 'CHM\\Sarah'
GO
sp_defaultdb 'CHM\\Sarah', 'courses'
GO
sp_grantlogin 'CHM\\Betty'
GO
sp_defaultdb 'CHM\\Betty', 'courses'
GO
sp_grantlogin 'CHM\\Ralph'
GO
sp_defaultdb 'CHM\\Ralph', 'courses'
GO
sp_grantlogin 'CHM\\Diane'
GO
sp_defaultdb 'CHM\\Diane', 'courses'
GO
其次,添加john、sarah、betty、ralph、diane為數據庫courses的數據庫用戶。這樣john、sarah、betty、ralph、diane就可以實現對courses的訪問。這是數據庫級的安全性。數據庫的訪問權限通過映射數據庫用戶和登錄賬戶之間的關系來實現的。
USE courses
GO
sp_grantdbaccess 'CHM\\John'
GO
sp_grantdbaccess 'CHM\\Sarah'
GO
sp_grantdbaccess 'CHM\\Betty'
GO
sp_grantdbaccess 'CHM\\Ralph'
GO
sp_grantdbaccess 'CHM\\Diane'
GO
第三,根據具體的應用環境設置角色professor、student。在學校里有兩種典型的角色:教師和學生。
sp_addrole 'Professor'
GO
sp_addrole 'Student'
GO
第四,將教師設置成教師角色professor,將學生設置成學生角色student。
sp_addrolemember 'Professor', 'CHM\\John'
GO
sp_addrolemember 'Professor', 'CHM\\Sarah'
GO
sp_addrolemember 'Professor', 'CHM\\Diane'
GO
sp_addrolemember 'Student', 'CHM\\Betty'
GO
sp_addrolemember 'Student', 'CHM\\Ralph'
GO
sp_addrolemember 'Student', 'CHM\\Diane'
GO
最后,給角色professor、student設置權限,通過grant語句授權。
GRANT SELECT ON StudentGradeView TO Student
GO
GRANT SELECT, UPDATE ON ProfessorGradeView TO Professor
GO
該腳本給 John 和 Sarah 教授提供了更新和查詢學生成績的權限,而學生 Betty 和 Ralph 只能查詢他們自己的成績。ProfessorGradeView 視圖應將教授限制在自己班學生的行上,而 StudentGradeView 應限制學生只能查詢自己的成績。
5 結束語
基于角色的訪問控制以其授權的靈活性和管理授權的高效性而著稱,通過在學生成績管理系統為例,SQL Server 2000平臺中,引入角色的概念,實現基于角色的訪問控制應用。
參考文獻:
[1] 張敏,徐震,馮登國,等. 數據庫安全[M].北京:科學技術出版社,2005.
[2] ferraiolo D,Sandhu R,Gavrila S,et al.Propoeed NIST standard for role-based access control[J].ACM TISSEC,2001,4(3):224-274.