關(guān)于用戶權(quán)限的數(shù)據(jù)庫設(shè)計(jì)_第1頁
關(guān)于用戶權(quán)限的數(shù)據(jù)庫設(shè)計(jì)_第2頁
關(guān)于用戶權(quán)限的數(shù)據(jù)庫設(shè)計(jì)_第3頁
關(guān)于用戶權(quán)限的數(shù)據(jù)庫設(shè)計(jì)_第4頁
關(guān)于用戶權(quán)限的數(shù)據(jù)庫設(shè)計(jì)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1 設(shè)計(jì)思路 為了設(shè)計(jì)一套具有較強(qiáng)可擴(kuò)展性的用戶認(rèn)證管理,需要建立用戶、角色和權(quán)限等數(shù)據(jù)庫表,并且建立之間的關(guān)系,具體實(shí)現(xiàn)如下。 1.1 用戶 用戶僅僅是純粹的用戶,用來記錄用戶相關(guān)信息,如用戶名、密碼等,權(quán)限是被分離出去了的。用戶(User)要擁有對某種資源的權(quán)限,必須通過角色(Role)去關(guān)聯(lián)。 用戶通常具有以下屬性:         編號,在系統(tǒng)中唯一。  ü    &#

2、160;    名稱,在系統(tǒng)中唯一。  ü         用戶口令。 ü         注釋,描述用戶或角色的信息。 1.2 角色 角色是使用權(quán)限的基本單位,擁有一定數(shù)量的權(quán)限,通過角色賦予用戶權(quán)限,通常具有以下屬性: ü    

3、60;    編號,在系統(tǒng)中唯一。 ü         名稱,在系統(tǒng)中唯一。 ü         注釋,描述角色信息 1.3 權(quán)限        權(quán)限指用戶根據(jù)角色獲得對程序某些功能的操作,例如對文件的讀、寫、修改和刪除功能,通常具有以下屬

4、性: ü         編號,在系統(tǒng)中唯一。 ü         名稱,在系統(tǒng)中唯一。 ü         注釋,描述權(quán)限信息 1.4 用戶與角色的關(guān)系 一個(gè)用戶(User)可以隸屬于多個(gè)角色(Role),一個(gè)角色組也可擁有多個(gè)用戶,用戶

5、角色就是用來描述他們之間隸屬關(guān)系的對象。用戶(User)通過角色(Role)關(guān)聯(lián)所擁有對某種資源的權(quán)限,例如 l         用戶(User): UserID      UserName      UserPwd 1           

6、0;       張三                 xxxxxx 2                   李四    

7、;             xxxxxx       l         角色(Role): RoleID           RoleName    

8、;       RoleNote  01                  系統(tǒng)管理員       監(jiān)控系統(tǒng)維護(hù)管理員        02     &

9、#160;            監(jiān)控人員           在線監(jiān)控人員        03                 

10、 調(diào)度人員           調(diào)度工作人員        04                  一般工作人員    工作人員      

11、  從該關(guān)系表可以看出,用戶所擁有的特定資源可以通過用戶角色來關(guān)聯(lián)。 1.5 權(quán)限與角色的關(guān)系 一個(gè)角色(Role)可以擁有多個(gè)權(quán)限(Permission),同樣一個(gè)權(quán)限可分配給多個(gè)角色。例如: l         角色(Role): RoleID           RoleName    

12、60;      RoleNote  01            系統(tǒng)管理員       監(jiān)控系統(tǒng)維護(hù)管理員        02           

13、       監(jiān)控人員          在線監(jiān)控人員        03                  調(diào)度人員    &#

14、160;     調(diào)度工作人員        04                  一般工作人員   工作人員         l   &

15、#160;     權(quán)限(Permission): PermissionID      PermissionName       PermissionNote 0001                   &#

16、160;    增加監(jiān)控                 允許增加監(jiān)控對象 0002                        修改監(jiān)控

17、                 允許修改監(jiān)控對象 0003                        刪除監(jiān)控     &#

18、160;           允許刪除監(jiān)控對象 0004                        察看監(jiān)控信息       允許察看監(jiān)控對象  

19、l         角色權(quán)限(Role_Permission): RolePermissionID   RoleID PermissionID RolePermissionNote 1                     &#

20、160;       01            0001        角色“系統(tǒng)管理員”具有權(quán)限“增加監(jiān)控” 2                 

21、            01            0002        角色“系統(tǒng)管理員”具有權(quán)限“修改監(jiān)控” 3            

22、0;                01            0003        角色“系統(tǒng)管理員”具有權(quán)限“刪除監(jiān)控” 4        &#

23、160;                    01            0004        角色“系統(tǒng)管理員”具有權(quán)限“察看監(jiān)控” 5    

24、                         02            0001        角色“監(jiān)控人員”具有權(quán)限“增加監(jiān)控” 

25、6                             02            0004        

26、;角色“監(jiān)控人員”具有權(quán)限“察看監(jiān)控”         由以上例子中的角色權(quán)限關(guān)系可以看出,角色權(quán)限可以建立角色和權(quán)限之間的對應(yīng)關(guān)系。1.6 建立用戶權(quán)限 用戶權(quán)限系統(tǒng)的核心由以下三部分構(gòu)成:創(chuàng)造權(quán)限、分配權(quán)限和使用權(quán)限。 第一步由Creator創(chuàng)造權(quán)限(Permission),Creator在設(shè)計(jì)和實(shí)現(xiàn)系統(tǒng)時(shí)會(huì)劃分。利用存儲(chǔ)過程CreatePermissionInfo(PermissionName,PermissionNote)創(chuàng)建權(quán)限信息,指定系統(tǒng)模塊具有哪些權(quán)限。

27、60;第二步由系統(tǒng)管理員(Administrator)創(chuàng)建用戶和角色,并且指定用戶角色(UserRole)和角色權(quán)限(RolePermission)的關(guān)聯(lián)關(guān)系。 1)        具有創(chuàng)建用戶、修改用戶和刪除用戶的功能: Administrator l         存儲(chǔ)過程CreateUserInfo(UserName,UserPwd)創(chuàng)建用戶信息;l   &#

28、160;     存儲(chǔ)過程ModifyUserInfo(UserName,UserPwd)修改用戶信息; l         存儲(chǔ)過程DeleteUserInfo(UserID)刪除用戶信息; 2)        具有創(chuàng)建角色和刪除角色的功能: Administrator l     &#

29、160;   存儲(chǔ)過程CreateRoleInfo(RoleName,RoleNote)創(chuàng)建角色信息;l         存儲(chǔ)過程DeleteRoleInfo(RoleID)刪除角色信息; 3)Administrator具有建立用戶和角色、角色和權(quán)限的關(guān)聯(lián)關(guān)系功能: l    存儲(chǔ)過程GrantUserRole(UserID,RoleID,UserRoleNote)建立用戶和角色的關(guān)聯(lián)關(guān)系; l 

30、        存儲(chǔ)過程DeleteUserRole(UserRoleID)刪除用戶和角色的關(guān)聯(lián)關(guān)系; l         存儲(chǔ)過程GrantRolePermission(RoleID,PermissionID,RolePermissionNote)建立角色和權(quán)限的關(guān)聯(lián)關(guān)系; l         存儲(chǔ)過程DeleteR

31、olePermission(RolePermissionID)刪除角色和權(quán)限的關(guān)聯(lián)關(guān)系; 第三步用戶(User)使用Administrator分配給的權(quán)限去使用各個(gè)系統(tǒng)模塊。利用存儲(chǔ)過程GetUserRole(UserID, UserRoleID output),GetRolePermission(RoleID,Role- -PermissinID output)獲得用戶對模塊的使用權(quán)限。1.7 用戶認(rèn)證實(shí)現(xiàn) 當(dāng)用戶通過驗(yàn)證后,由系統(tǒng)自動(dòng)生成一個(gè)128位的TicketID保存到用戶數(shù)據(jù)庫表中,建立存儲(chǔ)過程Login(User

32、ID,UserPwd, TicketID output)進(jìn)行用戶認(rèn)證,認(rèn)證通過得到一個(gè)TicketID,否則TicketID為null。其流程圖如下: 圖1 Login流程圖 得到TicketID后,客戶端在調(diào)用服務(wù)端方法時(shí)傳遞TicketID,通過存儲(chǔ)過程JudgeTicketPermission(TicketID,PermissionID)判斷TicketID對應(yīng)的用戶所具有的權(quán)限,并根據(jù)其權(quán)限進(jìn)行方法調(diào)用。 當(dāng)用戶退出系統(tǒng)時(shí),建立存儲(chǔ)過程Logout(UserID)來退出系統(tǒng)。當(dāng)用戶異常退出系統(tǒng)時(shí),根據(jù)最后的登陸時(shí)間(LastS

33、ignTime)確定用戶的TickeID,建立存儲(chǔ)過程ExceptionLogout(UserID,LastSignTime)處理用戶的異常退出。 圖2 Logout流程圖 WebService可以采用SoapHeader中寫入TicketID來使得TicketID從客戶端傳遞給服務(wù)端。.Net Remoting可以采用CallContext類來實(shí)現(xiàn)TicketID從客戶端傳遞給服務(wù)端。2 數(shù)據(jù)庫設(shè)計(jì) 2.1 數(shù)據(jù)庫表 圖3 數(shù)據(jù)庫關(guān)系圖 2.2 數(shù)據(jù)庫表說明 2.2.1&#

34、160;用戶表(Static_User) Static_User  Static_User字段名   詳細(xì)解釋   類型    備注  UserID   路線編號   varchar(20)   PK  UserName   用戶名稱    varchar(20)     UserPwd   用戶密碼  &#

35、160;varchar(20)    LastSignTime  最后登陸時(shí)間   datatime    SignState   用戶登陸狀態(tài)標(biāo)記   int  TickeID   驗(yàn)證票記錄編號   varchar(128)        2.2.2 角色表(Static_Role)&

36、#160;Static_Role Static_User字段名   詳細(xì)解釋   類型   備注  RoleID   角色編號   varchar(20)   PK  RoleName   角色名稱   varchar(20)     RoleNote   角色信息描述   varchar(20) 

37、       2.2.3 用戶角色表(Static_User_Role) Static_User_Role Static_User字段名   詳細(xì)解釋   類型   備注  UserRoleID   用戶角色編號   varchar(20)  PK  UserID   用戶編號   varchar(

38、20)   FK  RoleID   角色編號    varchar(20)   FK  UserRoleNote   用戶角色信息描述  varchar(20)      2.2.4 權(quán)限表(Static_Permission) Static_Permission Static_User字段名   詳細(xì)解釋 

39、0; 類型   備注  PermissionID  編號   varchar(20)   PK PermissionName  權(quán)限名稱   varchar(20)    PermissionNote  全息信息描述  varchar(20)        2.2.5 角色權(quán)限表(Stat

40、ic_Role_Permission) Static_Role_Permission Static_User字段名   詳細(xì)解釋   類型   備注   RolePermissionID    角色權(quán)限編號    varchar(20)   PK  RoleID   角色編號    varchar(20)   FK  Permi

41、ssionID   權(quán)限編號   varchar(20)   FK  RolePermissionNote   角色權(quán)限信息描述  varchar(20)        用“位”來存儲(chǔ)、修改用戶權(quán)限的方法以前我用記錄方式,如A用戶有3個(gè)模塊權(quán)限,則A有三條記錄    看到別人的程序里有這種方法,感覺不錯(cuò),給大家看看有沒有優(yōu)點(diǎn)可取。  &#

42、160; 用戶權(quán)限用一個(gè)int字段表示,可以放32位,    如果有第1,3,4模塊的權(quán)限則,值為1 4 8=13    _  _userId_userQx_  A? |? 13  _|_    增加權(quán)限具體實(shí)現(xiàn)    如增加第四個(gè)模塊的權(quán)限,4的二進(jìn)制值8  update qxUser 

43、set userQx = userQx|8 where userId='A'    刪除第四個(gè)模塊的權(quán)限    update qxUser set userQx = userQx&8 where userId='A'    如果刪除第四個(gè)模塊,則不加條件就可以了  update qxUse

44、r set userQx = userQx&8   以上在SqlServer2000企業(yè)版通過。    歡迎大家討論,有更好的方法大家共享呀    在Java 里    34&2 !=0就行了。   通過二,三兩步的理解,相信這篇文章就不會(huì)生澀了! 首先上文權(quán)限設(shè)計(jì)拙見(1)中只是想記錄下自己權(quán)限設(shè)計(jì)上的一點(diǎn)看法,以及將自己日常最常

45、用的權(quán)限解決方案記錄下來以供日后回顧,沒想到有朋友關(guān)注此類的設(shè)計(jì),那就只能先把代碼拿出來獻(xiàn)丑了,拋磚引玉,大家共同探討學(xué)習(xí)接著上文來說,上文所討論的權(quán)限設(shè)計(jì)是一條思路,但既然是web應(yīng)用,少不了數(shù)據(jù)庫的支持,本文我們來討論一下數(shù)據(jù)庫的設(shè)計(jì)。(以下想法及思路僅僅代表本人拙見)說到權(quán)限的數(shù)據(jù)庫設(shè)計(jì),必先理清權(quán)限中幾種實(shí)體及其關(guān)系,此部分想必有過設(shè)計(jì)權(quán)限經(jīng)驗(yàn)的同仁都知道怎么設(shè)計(jì)了,網(wǎng)上擺渡一下也是一褲衩子一褲衩子的,我們就在最平凡直觀的數(shù)據(jù)庫關(guān)系的基礎(chǔ)上來建立權(quán)限。下面是我的幾個(gè)表(所有的表都帶有一個(gè)pk_id,作為表的自動(dòng)生成的唯一主鍵): 用戶表(T_UserInfo): &

46、#160;1/*=*/  2/* Table: T_UserInfo                                         

47、   */  3/*=*/  4create table T_UserInfo   5( 6   pk_id  NUMBER   not null,  7  name  VARCHAR2(20), 8  sex  BOOLEAN, 9  a

48、ge    int, 10    emp_num    NUMBER, 11    polity     int, 12    unit               &#

49、160; VARCHAR2(50), 13    department           VARCHAR2(20), 14    specialty            int, 15    positio

50、n             VARCHAR2(10), 16    offtel               VARCHAR2(20), 17    famtel     

51、;          VARCHAR2(20), 18    post_state           VARCHAR2(10), 19    remark           &

52、#160;   VARCHAR2(100), 20    constraint PK_T_USERINFO primary key (pk_id) 21); 實(shí)戰(zhàn)經(jīng)驗(yàn):用戶表就不多說了,都是一些常用字段,年齡、電話、職位等,建議大家建立一個(gè)通用一些,字段多一些的一個(gè)用戶表,便于以后擴(kuò)展,以后如果有特殊需求,不用擴(kuò)這個(gè)基本表,可以通過主外鍵關(guān)系來新建一個(gè)表,用于擴(kuò)充字段   角色表(T_RoleInfo):  

53、;1/*=*/  2/* Table: T_RoleInfo                                         

54、0;  */ 3/*=*/ 4create table T_RoleInfo   5( 6    pk_id                number            &#

55、160;            not null,  7    role_name            VARCHAR2(20),  8    role_desc     

56、60;      VARCHAR2(100),  9    parent_role_id       NUMBER, 10    constraint PK_T_ROLEINFO primary key (pk_id) 11); 角色表中需要說明的就一個(gè)parent_role_id父角色id,此字段

57、用來擴(kuò)展角色的繼承關(guān)系。   資源表(T_ResourceInfo):  1/*=*/ 2/* Table: T_ResourceInfo                                

58、;        */  3/*=*/ 4create table T_ResourceInfo   5( 6    pk_id                NUMBER     

59、;                    not null,  7    module_name          VARCHAR2(20),  8    module_

60、code          VARCHAR2(10),  9    module_desc          VARCHAR2(100), 10    privilege_name       VARCHAR2(10),

61、 11    privilege_code       CHAR, 12    privilege_desc       VARCHAR2(100), 13    constraint PK_T_RESOURCEINFO primary key (pk_id) 

62、;14); 這個(gè)表需要說明的就比較多了,首先該表用來記錄資源與資源權(quán)限,我這邊所謂的資源就是實(shí)體,就是數(shù)據(jù)庫表,角色需要對應(yīng)到資源,有些角色對該資源有權(quán)限,有些角色則對該資源無權(quán)限,角色可對此資源操作的權(quán)限也不同。說白了,就是不同的角色對不同的數(shù)據(jù)庫表的操作權(quán)限不同。因此我們這里的資源就是數(shù)據(jù)庫表。   module_name:資源名;module_code:資源代碼(存放數(shù)據(jù)庫表名); privilege_name:權(quán)限名;privilege_code:權(quán)限代碼(代表權(quán)限的code,也就是我們上文所說的權(quán)值)   

63、;例如角色a對數(shù)據(jù)庫表T_UserInfo有添加與刪除的權(quán)限則該表應(yīng)該按照如下配置:  module_name:人員信息; module_code:T_UserInfo privilege_name:添加與刪除 privilege_code:6   這里我們假設(shè)的是2的0次方為添加權(quán)限,2的1次方為添加權(quán)限,2的2次方為刪除權(quán)限,2的3次方為更新權(quán)限,則擁有添加與刪除權(quán)限就應(yīng)該為2的1次方+2 的2次方=6,其實(shí)2的幾次方代表什么含義我們可以另外開個(gè)數(shù)據(jù)庫表來配置(或者xml文件)此處我們忽略這些步驟。當(dāng)

64、然如果你的權(quán)限較多,譬如你還希望 a這個(gè)角色對人員信息表有上傳得權(quán)限,我們可以將將上傳權(quán)限定義為2的4次方,16,16的16進(jìn)制數(shù)為10,記錄在數(shù)據(jù)庫里的形式應(yīng)該為0x10如果a 角色擁有添加、刪除、更新、上傳權(quán)限,則a的權(quán)值應(yīng)該為2的1次方+2的2次方+2的3次方+2的4次方=30,用16進(jìn)制來表示就應(yīng)該為0x1E,記錄 16進(jìn)制數(shù)據(jù),你不用擔(dān)心位數(shù)不夠。 剩余的就是幾張關(guān)系表了:人員角色關(guān)系表(T_R_User_Role):  1/*=*/  2/* Table: T_R_user_role                     

溫馨提示

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

最新文檔

評論

0/150

提交評論