[工學]訪問控制課程設計實驗報告_第1頁
[工學]訪問控制課程設計實驗報告_第2頁
[工學]訪問控制課程設計實驗報告_第3頁
[工學]訪問控制課程設計實驗報告_第4頁
[工學]訪問控制課程設計實驗報告_第5頁
已閱讀5頁,還剩46頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、訪問控制課程實驗報告課 程 設 計 報 告科目: 訪問控制 院系名稱: 計算機科學與技術 專業班級: 信安1001班 學 號: u201014627 姓 名: 江 雪 指導教師: 湯學明 崔永泉 駱婷 報告日期: 2012.5.25 計算機科學與技術學院目 錄第一部分 自主訪問控制dac4一、 實驗目的4二、 實驗題目及要求4三、 實驗原理43.1 自主訪問控制定義43.2 自主訪問控制的矩陣模型53.3 授權管理方式63.3.2 分散式授權管理模式73.4 數據庫訪問技術7四、 實驗環境8五、 實驗設計85.1 程序主要功能模塊85.2 數據庫操作85.3 設置系統管理模式105.4 用戶管

2、理115.5 客體管理125.6 權限管理17六、 實驗結果176.1 管理員身份登錄176.2 普通用戶登錄20第二部分 基于rbac1的訪問控制32一、 實驗目的32二、 實驗題目及要求32三、 實驗原理323.1 基于角色的訪問控制323.2 rbac1模型33四、 實驗環境34五、 實驗設計345.1 程序主要功能模塊345.2 數據庫操作355.3 角色管理355.4 權限管理39六、 實驗結果406.1 系統管理員登錄系統406.2 設置主體416.3 創建角色426.4 建立角色層次關系436.5 角色權限配置446.6 主體角色配置456.7 主體u1登陸系統456.8 插入角

3、色466.9 刪除角色47實驗體會49參考文獻49第一部分 自主訪問控制dac1、 實驗目的 1、通過大型作業,使學生進一步熟悉訪問控制的概念和基本原理; 2、培養學生將訪問控制的各種技術和方法應用與實際進行實施的能力; 3、要求學生運用訪問控制基本原理和方法結合實際充分發揮自主創新能力進行各有特色的設計。2、 實驗題目及要求要求設計若干人及對話界面,通過這些界面定義和配置主體、客體以及權限,然后對主體進行自主授權、傳遞授權的操作,并能撤銷授出的權限。修改主體對客體的訪問權限后,觀察系統訪問成功和不成功的情況是否符合安全策略。3、 實驗原理3.1 自主訪問控制定義自主訪問控制是指對某個客體具有

4、擁有權(或控制權)的主體能夠將對該客體的一種訪問權或多種訪問權自主地授予其它主體,并在隨后的任何時刻將這些權限回收。 自主訪問控制保證系統資源不被非法訪問,是一種有效手段,以保護用戶個人資源的安全為目標,以個人的意志為轉移,這種自主性滿足了個人的安全需求為用戶提供了靈活性,但對系統安全的保護力度是相當薄弱的。3.2 自主訪問控制的矩陣模型 系統狀態用一個有序三元組表示q=(s,o,a), 其中s主體的集合 o客體的集合 a訪問矩陣,行對應于主體,列對應客體設s=s1,s2,o=m1,m2,f1,f2,s1,s2 表 3.1 自主訪問控制矩陣m1m2f1f2s1s2s1r,w,erc,r,ws2

5、rr,w,ec,r,e 矩陣是動態增大的:創建一個客體就增加一個列 進來一個主體就增加一個行 例如:原表項為:表 3.2 自主訪問控制原表m1m2f1s1r,wra,es2rr,w,a 增加客體f2后的自主訪問矩陣變化為:(假設主體s1、s2對客體f2沒有關聯)。表 3.3 增加客體f2m1m2f1f2s1r,wra,es2rr,w,a 增加主體s3后的自主訪問矩陣變化為:(主體s3只對客體f2有r,w,a的權限)。表 3.4 增加主體s3m1m2f1f2s1r,wra,es2rr,w,as3r,w,a 回收權限的情況,狀態本身也在變化。原來的自主訪問矩陣為:表 3.5 自主訪問控制原表m1m

6、2f1s1r,wra,es2rr,w,a收回主體s1對客體m1的寫訪問權,及收回主體s2對客體m2的寫訪問權后,訪問控制矩陣見表4.6。表 3.6 回收權限 m1m2f1s1rra,es2rr,a 由以上分析可知,存儲結構是一個大稀疏矩陣。3.3 授權管理方式3.3.1 集中式授權管理模式一個主體si在創建某個客體oj后,該主體就獲得了對這一客體的c權和其它所有可能權限。c權意味著可以將它對oj所有其它(除c權以外)的訪問權限授予系統中任何一個主休,也可以撤銷系統中任何主體對oj的其它訪問權限。其它主體因為對oj不具有c權,因此即使他們對oj具有某些訪問權限,但它們也無權將這些權限轉授給別的主

7、體、或撤銷別的主體對oj的任何訪問權限在這種管理模式下,對于任一客體oj,哪些主體可以對其進行訪問,可以進行什么樣的訪問,完全由oj的擁有者決定。3.3.2 分散式授權管理模式 在分散式管理模式下,客體的擁有者不但可將對該客體的訪問權授予其它客體,而且可同時授予他們對該客體相應訪問權的控制權(或相應訪問權的授予權)。 (1)允許傳遞授權; (2)當一個主體撤銷它所授予的對某個客體的某種訪問權限時,必須將由于這一授權而引起的所有授權都予以撤銷。3.4 數據庫訪問技術自主訪問控制系統是在數據庫的基礎上建立的,其中涉及到對數據庫的操作,本實驗中對數據庫的操作是借助于linq技術實現的,本實驗使用的數

8、據庫是sql sever。 linq(language integrated query)是visual studio 2008中的領軍人物。借助于linq技術,我們可以使用一種類似sql的語法來查詢任何形式的數據。目前為止linq所支持的數據源有sql server、xml以及內存中的數據集合。開發人員也可以使用其提供的擴展框架添加更多的數據源,例如mysql、amazon甚至是google desktop。 在本程序中,數據源采用的是sql server。linq包括五個部分:linq to objects、linq to datasets、linq to sql、linq to enti

9、ties、linq to xml。 在本實驗中使用的是linq to sql組件。linq to sql 是 .net framework 3.5 版的一個組件,提供了用于將關系數據作為對象管理的運行時基礎結構。 在 linq to sql 中,關系數據庫的數據模型映射到用開發人員所用的編程語言表示的對象模型。當應用程序運行時,linq to sql 會將對象模型中的語言集成查詢轉換為sql,然后將它們發送到數據庫進行執行。當數據庫返回結果時,linq to sql 會將它們轉換回可以用自己的編程語言處理的對象。4、 實驗環境操作系統:windows 7編程工具和語言:microsoft vi

10、sual studio 2010 c#5、 實驗設計5.1 程序主要功能模塊程序主要功能模塊如圖5.1所示。圖5.1 程序主要功能模塊圖5.2 數據庫操作 1.創建新的sql server數據庫,選擇本機的服務器,輸入新數據庫名稱accessdata,結果如圖5.2所示;圖 5.2 創建新的數據庫2.創建數據庫accessdata中要存放的表。自主訪問控制系統的數據庫中主要是用到了以下四張表: (1)objects表 存放客體信息 (2)rights表 存放主體對客體的權限(3)rights_give表 存放授權信息(4)users表 存放主體(用戶)信息創建成功后如圖5.3所示;圖 5.3

11、成功創建數據庫表3.為accessdata數據庫創建dbml文件dac.dbml,并將所創建的表均添加到dac.dbml文件中,創建一個有關所有表的實體類,如圖5.4所示;圖 5.4 dac.dbml文件4.創建accessdata數據庫的數據上下文類的實例dc;5.創建查詢語句查詢表中數據,將其中符合查詢條件的數據返回指定變量中。5.3 設置系統管理模式設置系統管理模式是通過系統管理員在登錄系統時進行選擇設置的,默認的管理模式是集中式管理,如果是普通用戶進行登錄,可看到系統的可選擇管理模式,但是卻不能設置系統的管理模式。這部分功能的實現主要是通過在program.cs文件中建立了一個類cur

12、rentuser,用來傳遞相關的當前用戶的信息。類currentuser的定義如下:public class currentuser public string username; public string password; public string rule; public int groupid; public int flag=0; /當flag為0,表示集中式管理,當flag為1,表示分散式管理,默認為集中式管理 public void setusername(string str) username = str; 其中,username可向多個子窗體結構傳遞當前使用系統的用戶的

13、用戶名,flag可向多個子窗體結構傳遞當前系統設定的管理模式,當flag為0,表示集中式管理,當flag為1,表示分散式管理,便于在后面的多個子窗口中進行調用。5.4 用戶管理這一部分主要實現的是系統管理員登錄系統后,對用戶信息進行管理,具體可分為添加用戶,刪除用戶,修改用戶名和用戶密碼,如果用戶要進行修改自己的用戶名和用戶密碼,則需要向管理員申請。5.4.1 添加用戶添加用戶即是向數據庫中的users表添加一項,管理員登錄系統后,設定新加用戶的用戶名,密碼,用戶組后,便可向數據庫中的users表添加一項。具體實現過程:(1)首先創建dacdatacontext數據庫的數據上下文類的實例dc,

14、表達式為 dacdatacontext dc = new dacdatacontext(); (2)首先新建一個users表的變量con; (3)通過查詢語句判斷表中是否已經存在該用戶名;如果存在則提醒管理 員系統中已經存在該用戶,否則進行第4步;(4)對變量con的各個屬性進行賦值, con.password = textboxpwd.text; con.user = textboxuname.text; con.groupid = int.parse(textboxgroupid.text);(5)將con變量插入數據庫,表達式為db.users.insertonsubmit(con);(

15、6)更新數據庫,表達式為db.submitchanges();(7)更新用戶管理信息窗體結構中顯示的所有的用戶信息,添加成功則可 在用戶管理信息窗體結構中看到新添加的用戶信息。5.4.2 刪除用戶刪除用戶即是刪除數據庫中的users表中指定用戶名的一項,管理員登錄系統后,輸入要被刪除用戶的用戶名,密碼,用戶組后,便可刪除數據庫中的users表中的一項。具體實現過程: (1)首先創建dacdatacontext數據庫的數據上下文類的實例dc,表達式為 dacdatacontext dc = new dacdatacontext(); (2)首先新建一個users表的變量con; (3)通過查詢語

16、句判斷users表中是否存在要被刪除的用戶名;如果不存在則提醒管理員系統中不存在該用戶,否則將找到的用戶信息對應的項賦給con,進行第4步; (4)刪除users表要被刪除的主體信息,表達式為 db.users.deleteonsubmit(con); (5)通過查詢語句查找objects表中該主體創建的所有客體,刪除objects表中該主體創建的所有的客體信息; (6)通過查詢語句查找rights表中與該主體相關的權限信息,刪除rights表中該主體所有的權限信息; (7)通過查詢語句查找rights_give表中與該主體相關的授限信息,刪除 rights_give表中該主體所有的授權信息;

17、 (8)更新數據庫,表達式為db.submitchanges();5.5 客體管理5.5.1 創建客體創建客體即是向數據庫中的objects表添加一項,普通登錄系統后,設定新加客體的客體名,客體內容后,便可向數據庫中的objects表添加一項。具體實現過程: (1)首先創建dacdatacontext數據庫的數據上下文類的實例dc,表達式為 dacdatacontext dc = new dacdatacontext(); (2)首先新建一個objects表的變量obj; (3)通過查詢語句判斷objects表中是否已經存在要添加的客體的客體名; 如果存在則提醒用戶系統中已經存在該客體,否則進

18、行第4步; (4)對變量obj的各個屬性進行賦值, obj.objectname = this.textbox_objname.text; obj.objectdata = this.textbox_objdata.text; obj.owner = str; (5)將obj變量插入數據庫中的objects,表達式為 db.objects.insertonsubmit(obj); (6)更新數據庫,表達式為db.submitchanges(); (7)更新當前用戶的客體管理信息窗體結構中顯示的所有的客體信息,添加 成功則可在客體管理信息窗體結構中看到新添加的客體信息。5.5.2 查看客體當前用

19、戶想要查看某客體的內容時,如果當前用戶具有查看該客體的權限時,則可以進行查看該客體,否則系統拒絕該用戶的請求。具體實現過程:通過匹配用戶輸入的客體名,查詢rigths表中是否存在當前主體對該客體的權限,如果不存在則提醒用戶不能查看該客體,否則顯示客體的內容。5.5.3 編輯客體當前用戶想要編輯某客體的內容時,如果當前用戶具有編輯該客體的權限時,則可以進行編輯該客體,否則系統拒絕該用戶的請求。具體實現過程:通過匹配用戶輸入的客體名,查詢rigths表中是否存在當前主體對該客體的w權限,或者是否存在當前主體對該客體的o權限,即當前主體是否是該客體的創建者,如果不存在則提醒用戶不能編輯該客體,否則可

20、以編輯客體的內容。5.5.4 刪除客體當前用戶想要刪除某客體,只有客體的創建者才能刪除該客體,如果當前用戶是該客體的創建者,則可以刪除該客體,否則系統拒絕該用戶的請求。具體實現過程:查詢rigths表中是否存在當前主體對該客體的o權限,即當前主體是否是該客體的創建者,如果不存在則提醒用戶不能刪除該客體,否則可以刪除該客體。(1)判斷當前主體是否是該客體的創建者;在刪除客體時,與前面對客體的操作的處理不同的是,查看客體、編輯客體均是通過匹配用戶輸入的客體名在rights表中進行查找,而刪除客體是通過獲得選中行進行刪除的。普通用戶登錄后,可以看到客體管理信息窗口,其中客體框是用datagridvi

21、ew實現的,客體框內顯示的是當前用戶可以操作的客體,用戶在客體框內選中要刪除的客體所在的行,由于該行中包括該客體的客體名以及當前用戶對該客體的權限,程序便可獲得該客體的客體名以及當前用戶對該客體的權限。如果獲得的權限字符串中包括o權,那么允許刪除客體的操作,繼續第2步,否則系統拒絕用戶刪除客體操作。(2)在objects表中刪除該客體; (3)在rights表中刪除所有主體對該客體的權限; (4)在rights_give表中刪除對該客體的所有信息;(5) 提交更改到數據庫, (6)更新客體管理信息窗口,更新權限管理窗口中當前主體可轉授的權限和已轉授的權限,更新主體管理信息,通過系統的提示或者查

22、看客體管理信息窗口、權限管理窗口和主體管理信息,均可發現是否已經成功刪除客體。5.5.5 轉授對客體的權限當前用戶想要轉授對某客體的某種權限,如果當前用戶是該客體的創建者或者具有對該客體的控制權,則可以轉授對該客體的某種權限,否則系統拒絕該用戶的請求。具體實現過程: (1)判斷當前系統管理模式是集中式管理還是分散式管理; 如果是集中式管理模式,則只允許客體的創建者轉授對該客體的訪問權,不可以轉授對該訪問權的控制權,如果是分散式管理,則用戶可以同時轉授對該客體的訪問權和對該訪問權的控制權。 (2)匹配用戶輸入的客體名,查找objects表中是否存在該客體,如果不存在,則系統會提示相應的錯誤信息,

23、否則繼續第3、4步; (3)集中式管理模式下 判斷當前用戶是否是該客體的創建者,是則繼續判斷rights表中是否已經存在一項主鍵和被插入記錄相同的記錄,存在系統會提示相應的信息,否則在rights表中插入一條新的記錄,如果當前用戶不是該客體的創建者,則系統會提示相應的錯誤信息。 在rights_give表中插入一條新的記錄; 提交更改到數據庫; 更新權限管理窗口中可轉授的權限信息。 (4)分散式管理模式下 通過匹配客體名,主體名,權限在rights表中進行查詢當前用戶是否對該客體的訪問權限具有控制權,如果存在控制權則繼續,否則系統會提示相應的錯誤信息; 判斷rights表中是否已經存在一項主鍵

24、和被插入記錄相同的記錄,存在系統會提示相應的信息,否則在rights表中插入一條新的記錄; 在rights_give表中插入一條新的記錄; 提交更改到數據庫; 更新權限管理窗口中可轉授的權限信息。 (5)通過系統的提示信息,或者查看權限管理窗口中顯示的可轉授的權限信息,或者查看主體管理窗口中的信息均可判斷是否成功轉授權限。5.5.6 回收對客體的權限當前用戶想要回收對主體的某種權限,如果當前用戶是該客體的創建者或者具有對該客體的控制權,則可以回收對該主體回收對客體的某種權限,否則系統拒絕該用戶的請求。具體實現過程: (1)判斷當前系統管理模式是集中式管理還是分散式管理;如果是集中式管理模式,則

25、只允許客體的創建者回收主體對該客體的訪問權,如果是分散式管理,則只要存在相應的授權信息,便可進行回收權限; (2)匹配用戶輸入的客體名,查找objects表中是否存在該客體,如果不存在,則系統會提示相應的錯誤信息,否則繼續第3、4步; (3)集中式管理模式下 判斷當前用戶是否是該客體的創建者,如果當前用戶不是該客體的創建者,則系統會提示相應的錯誤信息,如果當前用戶是該客體的創建者,則繼續; 刪除rights表中被回收的主體對該客體的記錄; 刪除rights_give表中對應的記錄; 提交更改到數據庫; 更新權限管理窗口中已轉授的權限信息。 (4)分散式管理模式下 通過匹配客體名,進行回收的主體

26、名,被回收的主體名以及權限在rights表中進行查詢當前用戶是否對對該主體轉授了相應的權限,如果存在則繼續,否則系統會提示相應的錯誤信息;下面舉例說明回收權限的過程: 比如user1收回user2對object1的讀權限 1) 先刪除rights表中user2對object1的讀權限(該權限由user1授予)記錄; delete from rights where username=user2 and objectname=object1 and rights=r and whogiveme=user12)再刪除rights_give表中的授權記錄; delete from rights_gi

27、ve where username=user1 and object=object1 and rights=r and touser=user2 3)查詢rights_give表,看是否有其他用戶授予user2相同的權限,即對 object1的讀權限,如果有記錄,則停止權限回收; select * from rights_give where object=object1 and touser=user2 and rights=r 4)查詢rights_give表,看user2是否將該權限轉授給別人,如果無記錄, 停止權限回收,否則轉第1步繼續。 select * from rights_gi

28、ve where object=object1 and username=user2 and rights=r (5)通過系統的提示信息,或者查看權限管理窗口中顯示的已轉授的權限信息,或者查看主體管理窗口中的信息均可判斷是否成功回收權限。這部分代碼主要分為三部分,函數private void button_take_click(object sender, eventargs e)主要是判斷當前的管理模式,然后選擇調用函數;函數private void getback(string str0, string str1, string str2, string str3)實現的是集中式管理模式下

29、回收權限;函數private void getback_2(string str0, string str1, string str2, string str3)實現的是分散式管理模式下回收權限。5.6 權限管理主體對客體的權限信息主要是顯示在主體管理窗口,這部分又分為兩個部分,一個是主體列表,一個是被選中的主體的權限信息。具體實現過程:(1) 主體列表使用的是listbox控件,通過遍歷users表,將查詢到的每一個主體的主體名添加到listbox控件中并顯示出來;(2) 顯示被選中的主體的權限信息使用的是datagridview控件,當選中主體列表中某一行的主體時,在被選中的主體的權限信息

30、框中便會顯示出有關該主體的所有權限信息。這部分主要就是通過單擊listbox控件某一行產生的響應事件來實現的。在響應事件中獲得主體名,然后通過匹配主體名進行查詢rights表,找出該主體的所有權限信息,并將查找到的項作為datagridview控件的數據源,便可成功顯示選中主體的所有權限信息。6、 實驗結果6.1 管理員身份登錄運行程序,使用管理員身份登錄,這時系統將默認管理模式為“集中式管理”。如圖6.1所示:圖6.1 管理員登錄登錄成功后可看到,數據庫中已經建立了user1,user2,user3三個主體,當前管理模式是集中式管理,還可以繼續添加用戶和刪除用戶。如圖6.2所示。圖 6.2

31、用戶管理信息6.1.1 添加用戶 輸入想要添加的用戶的名字和密碼,即可添加用戶,如圖6.3所示,成功添加用戶uesr4。圖6.3 添加用戶成功 如果添加的用戶在數據庫中已經存在,那么系統會提示該用戶已經存在,添加失敗,如圖6.4。圖6.4 添加用戶失敗6.2.1 刪除用戶 用鼠標選擇想要刪除的用戶,點擊“刪除用戶”,就可以將該用戶從數據庫中刪除。如圖6.5所示。圖6.5 刪除用戶6.2 普通用戶登錄輸入用戶名user1和密碼,選擇普通用戶登錄,如圖6.6所示。這時我們可以選擇兩種管理方式:集中式管理和分散式管理,我們將在下面一一演示。圖6.6 普通用戶登錄登陸后可以看到,目前我們還沒有創建任何

32、客體,如圖6.7所示。圖6.7 初始客體信息表6.2.1 集中式管理模式下的權限管理 創建和刪除客體當前用戶創建客體obj1,如圖6.8。用戶可以創建多個客體,用戶創建的所有客體都將顯示出來,并且可以通過“查看客體”進行查看。圖 6.8 創建客體 當前用戶刪除客體obj11,如圖6.9、圖6.10。圖 6.9 確認是否刪除客體 圖 6.10 刪除客體成功 權限管理權限管理頁面分為可轉授的權限和已轉授的權限,結合上述操作,當前用戶user1已經創建了客體obj1,那么便可轉授對客體obj1的訪問權限。下面user1將對obj1的讀權限轉授給user2,對obj1的寫權

33、限轉授給obj3。圖 6.11 成功轉授對obj1的讀權限 由于當前管理模式是集中式管理,不能轉授對訪問權限的控制權。圖 6.12 集中式管理模式下轉授控制權失敗 由下圖可知,user2獲得了對obj1的讀權限,user3獲得了對obj1的寫權限。圖 6.13 成功授權下面檢測user2和user3是否真正獲得了對應的權限。user2登錄系統,并且讀取客體obj1,由下圖可知,user2讀取客體obj1成功。圖 6.14 user2成功讀取客體obj1user2嘗試編輯客體,但由于user2不具有對obj1的寫權限,故此操作失敗。圖 6.15 user2編輯客體obj1失敗user3登錄系統,

34、并且讀取客體obj1,由下圖可知,user3讀取客體obj1成功,同時也可以判斷上一步操作中user2對obj1的修改失敗。圖 6.16 user3成功查看客體obj1user3嘗試編輯客體,由于user3具有對obj1的寫權限,故此操作成功。圖 6.17 user3成功編輯客體obj1 user1登錄系統,可查看obj1是否真正被修改了,由下圖可知,obj1的確已經被user3修改了。圖 6.18 user1查看obj1是否真正被修改user1回收user2對obj1的讀權限以及user3對obj1的寫權限。圖 6.19 user1成功回收user2對obj1的讀權限user1只對user3

35、授予了對obj的w權,如果要回收user3對obj1的讀權限,系統會提示錯誤信息。圖 6.20 user1回收權限失敗user1成功回收user3對obj1的寫權限后,可由權限管理窗口的已轉授的權限信息為空判斷出以上回收權限的操作的確成功。圖 6.21 user1回收權限成功6.2.2 分散式管理模式下的權限管理 轉授權限普通用戶user1,user2,user3,user4分別登錄系統,并且分別創建客體obj1,obj2,obj3,obj4。然后user1將對obj1的w權限授予了user2,同時授予了user2對w權限的控制權。user2又將對obj1的w權限授予了user3

36、,并允許user3再授權,user3又將對obj1的w權限授予了user4,并允許user4再授權,user1又將對obj1的w權限授予了user4,但是沒有授予user4對w權限的控制權。上述授權過程可用有向圖6.22表示。圖 6.22 對obj1的訪問權限的轉移 進行了以上授權后,通過主體管理窗口的信息判斷授權是否成功,如圖6.23、圖6.24、圖6.25、圖6.26所示。圖 6.23 user1的權限信息圖 6.24 user2的權限信息圖 6.25 user3的權限信息圖 6.26 user4的權限信息 回收權限user1回收對user2的授權,則此時user2授予use

37、r3的權限及user3授予user4的權限也相應被撤銷,雖然user4保留了直接由user1得到的寫訪問權,但是user4失去了對此訪問權的控制權。圖 6.27 user1成功回收了對user2的授權圖 6.28 回收權限后user2的權限圖 6.29 回收權限后user3的權限圖 6.30 回收權限后user4的權限user3登錄系統,嘗試編輯客體obj1,但是由于user3對客體obj1的權限已經被回收了,所以操作失敗,見圖6.31。圖 6.31 user3已經沒有權限編輯客體obj1 下面user4登錄系統,嘗試轉授對obj1的w權限,但是由于user3授予user4的w權限及控制權均已

38、被回收,user4直接從user1獲得的權限并不具有控制權,所以操作失敗,見圖6.32。圖 6.32 user4轉授對obj1的w權失敗第二部分 基于rbac1的訪問控制1、 實驗目的 1、通過大型作業,使學生進一步熟悉訪問控制的概念和基本原理; 2、培養學生將訪問控制的各種技術和方法應用與實際進行實施的能力; 3、要求學生運用訪問控制基本原理和方法結合實際充分發揮自主創新能力進行各有特色的設計。2、 實驗題目及要求 要求設計若干人機對話界面,通過這些界面定義和配置角色、角色層次、用戶角色(授權與回收)、角色權限(有繼承關系不用重定義)多對多關系,然后對主體的訪問權限進行控制實驗;進一步,修改

39、角色、角色層次、用戶角色、角色權限多對多關系,重復先前的實驗,然后比較訪問控制結果。3、 實驗原理3.1 基于角色的訪問控制基于角色的訪問控制的核心是引入了角色的概念,它使得操作權限不是直接授予用戶而是授予角色,用戶通過角色身份來獲得的相應的操作權限。基于角色的授權方法相對于單個用戶授權,大大地簡化了授權的機制和管理,在用戶的工作職務發生變化時,只要轉換他的角色身份,而不需要對其重新授權。當機構設置發生變化時,如某個部門撤銷,某些部門合并等也可以不修改應用程序,而只要修改角色與用戶、角色與操作權限之間的配置關系即可。3.2 rbac1模型 rbac1在rbac0的基礎上模型引入了角色層次的概念

40、。在rbac1模型中用偏序來描述角色之間的層次關系。在該偏序關系中,高級別的角色繼承低級別角色的所有權限。因此,一個用戶若是某高級別角色的成員,則隱含了他同時也是低級別角色的成員,反之則不然。3.2.1 rbac1模型定義 (1)u:表示用戶集 r:表示角色集 p:表示權限集 s:表示會話集 (2)papr,是權限到角色的多對多的指派; (3)ua ur,是用戶到角色的多對多的指派; (4)user: su,會話和用戶的單一映射,user(si)表示創建會話si的用戶; (5)roles: s2r,會話和角色子集的映射, roles(si)表示會話si對應的角色集合; roles(si) r|

41、 (user(si), r )ua (6)會話si具有的權限集 (7)rhrr,是集合r上的偏序關系,稱為角色層次關系; (8)roles: s2r,是會話和角色子集的映射函數,但和rbac0略有不同, roles(si) r| $rr且(user(si), r )ua即會話si對應的角色集可以由建立該會話的用戶所屬的任何角色或低級角色組成。 (9)會話si所具有的權限即會話si所具有的權限是由roles(si)中的每一角色,以及與被這些角色所覆蓋的低級角色相對應的權限組成的權限集。3.2.2 直接權限繼承 一些角色繼承模式通常使用術語角色來指代有名字的權限集合。這樣,角色繼承則是對權限子集的

42、引用(例如,如果r2所有的權限也都是r1的權限,那么就說 r1“繼承”r2)。角色是獨立于角色容器的存在而存在的。同樣,用戶和用戶組也是分別管理的,將用戶或組指派給角色也就是將角色定義的權限授予用戶和組成員。3.2.3 權限和用戶成員關系繼承另一種繼承模式使用術語角色來表示一種同時包含用戶和權限的結構,在這種模式下,角色層次中的一個角色既在一方面代表權限集合,又在另一方面代表用戶集合。處于角色層或其圖表頂端的角色擁有更強大的角色權力,越接近圖表底部的角色是越普遍的角色(例如,這些角色包含較少的權限和大量的用戶)。將用戶指派給角色,意味著將該角色的權限及其繼承的其它角色的所有權限全部賦給該用戶。

43、4、 實驗環境操作系統:windows 7編程工具和語言:microsoft visual studio 2010 c#5、 實驗設計5.1 程序主要功能模塊 本程序的主要功能模塊見圖5.1。圖5.1 程序功能模塊圖5.2 數據庫操作數據庫的相關操作和自主訪問控制系統基本上是一樣的,主要區別在于數據庫表的不同。基于rbac1的訪問控制系統的數據庫中主要是用到了以下6張表。 (1)roles表 存放所有角色信息 (2)roles_roles表 存放角色層次關系 (3)rights表 存放所有的權限信息 (4)roles_rights表 存放角色權限配置關系 (5)users表 存放主體信息 (6

44、)users_roles表 存放主體所具有的角色信息5.3 角色管理5.3.1 創建角色 創建角色即是向數據庫中的roles表添加一項,管理員登錄系統后,設定新加角色的角色名后,便可向數據庫中的roles表添加一項。具體實現過程:(1)首先創建rbacdatacontext數據庫的數據上下文類的實例rb,表達式為 rbacdatacontext rb = new rbacdatacontext(); (2)通過匹配管理員要創建的角色名稱進行查詢,判斷表中是否已經存在該角色名稱;如果存在則提醒管理員系統中已經存在該角色,否則進行第3步;(3)設置角色的窗體是子窗體,能夠從其父窗體中繼承roles

45、表的變量ro,對變量ro的各個屬性進行賦值, ro.role = textbox_role.text ; (4) 將ro變量插入數據庫中的roles表,表達式為 rb.roles.insertonsubmit(fm2.ro);(5)更新數據庫,表達式為db.submitchanges();(6)更新設置角色窗體結構中顯示的可設置為上下級角色的所有的角色名稱,添加成功則可在設置角色窗體結構中看到新添加的角色名稱。5.3.2 建立角色層次關系在基于rbac1的訪問控制系統中,管理員首先是創建所有的角色名稱,這一部分只是簡單的向數據庫中的roles表中插入所有的角色信息,并沒有涉及到角色層次的建立,

46、在建立了所有的角色名稱后,管理員可選擇其中的某些角色建立角色層次關系。根據rbac1模型的定義,用偏序來描述角色之間的層次關系。在該偏序關系中,高級別的角色繼承低級別角色的所有權限。因此,一個用戶若是某高級別角色的成員,則隱含了他同時也是低級別角色的成員,反之則不然。在本程序中,建立角色層次關系就是設置給角色的上級角色和下級角色,如果該角色沒有上級角色,那么在角色層次關系中,該角色節點就代表根節點。設置上下級角色主要是通過下面兩個函數來實現的。 private void bt_addhrole_click(object sender, eventargs e) /添加該角色的上級角色 priv

47、ate void bt_lrole_click(object sender, eventargs e)/添加該角色的下級角色添加該角色的上級角色的具體的實現過程: (1)首先創建rbacdatacontext數據庫的數據上下文類的實例rb,表達式為 rbacdatacontext rb = new rbacdatacontext(); (2)通過匹配管理員當前正在建立的角色關系中的上級角色名稱和下級角色名稱,判斷該角色關系是否已經建立,如果存在則提醒管理員系統中已經存在該角色層次關系,否則進行第3步; (3)設置角色的窗體是子窗體,能夠從其父窗體中繼承roles_roles表的變量rr,對變量

48、rr的各個屬性進行賦值, rr.h_role = str; rr.l_role = textbox_role.text; (4)查詢roles_roles表所有層次關系,判斷已經建立的角色關系中是否存在以當前正在建立的角色層次關系中的上級角色為下級角色的層次關系,如果沒有查找到,則說明當前正在建立的角色層次關系中的上級角色代表一個根節點,將rr的root屬性設置為1,否則說明當前正在建立的角色層次關系中的上級角色不能代表一個根節點,將rr的root屬性設置為0; (5)將rr變量插入數據庫中的roles_roles表,表達式為 rb.roles_roles.insertonsubmit(fm2

49、.rr); (6)查詢roles_roles表所有層次關系,判斷已經建立的角色關系中是否存在以當前建立的角色層次關系中的下級角色為上級角色的層次關系,如果找到,說明這些被查找到的角色層次關系中的上級角色不能代表一個根節點,將其root屬性修改為0; (7)設已經建立的角色層次關系結構中存在某個關系a和b,其中a為上級角色,b為下級角色,判斷當前插入的角色c是否以a為上級角色并且以b為下級角色,如果存在這樣的層次關系,那么就要刪除原來已經建立的a和b之間的層次關系,避免形成環狀層次關系; (8)更新數據庫,表達式為rb.submitchanges();添加該角色的下級角色的具體的實現過程: 這部

50、分的實現過程基本和上面添加該角色的上級角色的實現是一樣的,唯一區別是在添加該角色的上級角色中,當前正在添加的角色屬于該角色層次關系中的下級角色,而在添加該角色的下級角色中,當前正在添加的角色屬于該角色層次關系中的上級角色。5.3.3 繪制角色層次關系圖在基于rbac1的訪問控制系統中,角色層次關系可以用樹形結構圖進行形象的表示,所以在這部分的實現過程中,我采用的是treeview控件來實現的。具體實現過程: (1)清空treeview控件的所有節點信息并且設置treeview控件為可編輯狀態; (2)遍歷roles_roles表中的所有角色層次關系,查找其中root屬性值為1且不重復的項,這些

51、項中的上級角色均作為樹形圖中的根節點; (3)對第二部中找到的所有根節點,依次調用函數 private void get_nodes(treenode node);即是通過遞歸查找該根節點下的每一條分支上的所有子節點,依次添加到treeview控件中的相應的節點中。在上面的函數中調用了遞歸函數get_nodes(node),該函數的參數為treenode類型,實現的是通過查詢roles_roles表,判斷是否存在以參數node的text屬性值為上級角色名稱的角色層次關系,如果存在,則建立以該角色層次關系中的下級角色為text屬性值的樹節點,并添加為node節點的下級節點,將新建的樹節點繼續作為

52、參數繼續傳遞給函數get_nodes(node),不斷遞歸查詢,直到遍歷完整個roles_roles表。5.3.4 刪除角色系統管理員可以刪除角色層次關系中的某個角色,需要注意的是在刪除某個角色時,不僅僅是要刪除該角色在角色層次中與其他角色的關系,還要把該角色的下級角色添加為該角色的上級角色的直接下級角色,比如說a是b的上級角色,b是c的上級角色,當刪除角色b時,要將c添加為a的直接下級角色,即是在roles_roles表中添加新的一項,該項的上級角色是a,下級角色是c。具體實現過程: (1)首先創建rbacdatacontext數據庫的數據上下文類的實例rb,表達式為 rbacdatacontext rb = new rbacdatacontext(); (2)通過匹配要刪除的角色名稱,在roles表中進行查詢是否存在該角色,如果不存在提醒管理員系統中不存在該角色,否則進行第3步; (3)將roles表中查找到的要被刪除角色對應的項刪掉; (4)查詢roles_roles表,找出被刪除節點的所有上級節點; (5)查詢roles_roles表,找出被刪

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論