學    歷:美國西北大學電機電腦博士、國立清華大學計算機管理決策研究所碩士、國立台灣大學電機工程學士
學術專長:軟體工程、物件導向設計、計算機通訊、生物資訊學
經    歷:
 -中原大學資訊工程系副教授1990/08
 -交通部電信研究所副研究員1989/07至1990/06
 -工研院化工所新技術研究小組副研究員1982/07至1984/07

引言

隨著e化的腳步,現代的企業越來越多的資訊放置於電腦中,也使用越來越多的資訊應用系統,因此,如何保護這些重要的資產,使之不致遭到盜用或誤用,乃成了企業的一大課題。在企業內部安全控管的一個重要部份是使用者授權(Authorization),即是決定一個使用者的權限。在此權限指的是一個使用者可以使用哪些應用系統的功能,或是存取哪些資訊。這部份的控管是透過權限控管系統所提供的機制來達成。

雖然傳統上權限控管的實作是採取存取控制列(Access Control List)的方式,但是目前大部份的系統都改成以角色為主的權限控管(Role-Based Access Control,簡稱RBAC)的方式。在一個以角色為主的權限控管系統中,權限並不直接分配給使用者,而是分配給角色(Role),而使用者再透過擁有角色,間接取得權限,因此,角色是扮演 著使用者和權限之間中介者的任務。

以角色為主的權限控管的一個好處是可以有效解決擴大規模(Scalability)的問題。在一般的企業中,角色的個數通常會遠小於使用者的個數,即通常會有許多個使用者使用同一個角色,例如在銀行中,擁有櫃員這個角色的使用者通常不會只有一個,而且可能數以百計。因此,以角色為中介者來分配權限,在管理上要比將權限直接分配給使用 者要簡單許多。另一個主要好處是角色也兼具有組織層面上的意義,即角色通常可以對應到組織上的職位或職責,因此,可以用之來幫助擬定資訊安全政策及其實作。另外,如果一個人員調職或離職,只需重新分配角色或取消其角色的擁有即可,在管理方面也方便許多。

權限繼承

在一個以角色為主的權限控管系統中,系統管理者的一項主要工作是設定系統中的角色,並將權限分配給不同的角色。但是在實際的狀況下,有許多時候不同的角色會擁有共同的權限,例如會計和出納這兩個角色可能都擁有查帳的權限。另外,某一個角色可能只擁有另一個角色的部份權限,例如部門經理通常會擁有部門員工所擁有的權限,並且還會擁有部門員工所沒有的權限,也就是說部門員工只擁有部門經理所擁有的部份權限。在第一種情況下,如果兩個角色彼此是獨立且沒有存在任何關係,我們可以將共同的權限分別分配給這兩個不同的角色,雖然這樣會做重複的動作。但是如果兩個角色之間有關連的話,例如會計及出納可能都是財務部門的員工,因此,同樣會擁有財務部門員工的權限,如查帳的權限。在這種情況下,將共同的權限做重複分配可能就會造成日後維護上的負擔,例如增加或取消部門員工的權限,都必須對每一種角色來做,不僅費時,而且容易錯誤。因此,我們若能將共同的權限分配到一個新增的角色,然後將之分配給使用者,將能減少管理上的負擔。若是更進一步,讓此新角色所擁有的權限,也讓其他有關係的角色擁有,亦即其他角色能夠繼承此一新角色所擁有的權限,則在管理上就更方便了。例如前述,會計或出納這兩個角色都能繼承財務部門員工這個角色的權限,則在分配會計這個角色給一個使用者後,這個使用者就經由繼承同時取得查帳的權限。另外,我們也會將企業內部常用的功能如收發電子郵件、請假、出差等基本功能設為一般員工這個角色的權限,而公司內部其他角色都繼承一般員工這個角色,也就擁有了使用這些基本功能的權限。例如部門經理可以透過繼承部門員工,取得部門員工所擁有的權限。

角色繼承是一種角色和角色之間的關係,當角色A繼承角色B的權限時,我們稱角色A是資深角色(Senior Role),角色B是資淺角色(Junior Role),亦即資深角色會繼承資淺角色的權限,這樣子的繼承方式稱之為直接繼承。另一種繼承方式是間接繼承,即當前述角色B又繼承另一角色C的權限,此時角色A不僅會擁有B的權限,而且還會透過角色B,間接擁有角色C的權限。藉由繼承關係,角色之間會形成一個階層式的結構稱之為無迴圈有向圖(Acyclic Directed Graph)的結構,樹狀圖(Tree)及網格圖(Lattice )皆是屬於這種結構,分別對應到不同的繼承方式。如果一個角色只能直接繼承另一個資淺角色的權限,但間接繼承則不受限制,這種繼承方式稱之為有限制的繼承(Limited Inheritance),此時角色之間會形成一個階層性的樹狀圖,如圖一所示。這樣的結構稱之為角色階層(Role Hierarchy)。

在圖一中,我們將工程部門員工所共同的權限,分配給工程部門員工這個角色。而軟體部門員工所共用的權限,則分配給軟體部門員工這個角色,並依此類推。因此,我們在設定程式設計師這個角色的權限時,只需設定其特定的權限即可,其餘的權限則自軟體部門員工及工程部門員工的角色中繼承。要注意的是在圖一中,權限繼承的方向和物件 導向程式設計中物件繼承的方向剛好相反,因此,在圖一中,角色間形成的實際上是一個反轉樹(Inverted Tree)的結構。

另外一種角色繼承的方式稱之為一般繼承(General Inheritance),即一個角色能直接繼承多於一個資淺角色的權限。此時角色之間會形成一個具階層性的網格圖(Lattice ),如圖二所示。但也可能形成一個如圖三的樹狀圖。

在圖一或圖二中,某些角色,如工程部門員等,其存在的目的純粹只是為了設定共同的權限,而不會分配給使用者,這樣的角色稱之為虛擬角色(Virtual Role),例如工程 部門員工這個角色就是一個虛擬角色。

雖然角色的繼承會在角色之間形成角色階層,一個公司也可能會有一個以上,且改此分開的角色階層,例如不同部門可能有自己的角色階層,而且彼此是獨立的。而且,不是每一個角色都必須屬於某一個角色階層,例如顧問、工讀生等角色,一般都會和其他角色沒有關連。

角色階層型態

在設計角色階層的時候,我們可以有幾種不同的考量。因此,我們介紹幾種不同的角色階層。

第一種稱之為一般化(Generalization)階層,也叫做"是一種"(ISA)階層。在圖四中,主治醫師"是一種"醫師,醫師"是一種"醫護人員。在這樣的關係中,醫師比主治醫師更具一般性,而醫護人員又比醫師更具一般性。而另一方面,主治醫師具有比醫師更大的能力,亦即擁有更多的權限。相同的,醫師也比醫護人員具有更多的權限。因此,在角色的設計上,基上本是基於一個角色所具備的能力而定,資深的角色擁有較大的能力,資淺的角色的能力則較少。另一種角色設計方式則是根據組織單位,如前述圖一所示。在這一種角色階層中,有些角色可能是虛擬角色(Virtual Role),如圖四中醫護人員這個角色,存在的目的只是為了設定醫師及護士共有的能力(亦即權限),而不會真正分配給使用者,因此,這個角色是虛擬角色。前述圖一中,工程部門員工這個角色也是虛擬角色。

另一需考慮的因素是,一個使用者通常具有多重角色,例如一個使用者如果是主治醫師的話,這使用者將同時具有醫師及醫護人員等角色。當這位使用者登入(Login)系統 時,通常系統將只啟用最資淺的角色,即醫護人員這個角色,如果使用者需要更高的權限的話,則再啟用更資深的角色。這種先啟用最資淺角色的方式,稱之為最小權限原則(Least Privilege Principle),也就是說使用者啟用的角色,其擁有的權限如果可以滿足目前工作所要求的權限,那就不再啟用權限更高的角色。這種方式和作業系統管理員在做一般性的方法時,通常會以一般使用者帳號登入,而非以系統管理員帳號登入的方式是相同的,主要的目的在於避免錯誤產生時,因權限太高而造成一些難以彌補的後果。

第二種角色階層稱之為集聚式(Aggregate)階層,也稱為"組成部分"(Part-of)的階層。這種階層的概念和物件模型中,一個複雜的物件是由其他較簡單的物件所構成的方式是相同的。這種角色階層主要特色是角色的定義是依工作內容或工作職掌所構成的。在大部份企業中,一個組織功能往往會由一些其他較小的工作所構成,而這些工作又可 能由其他更小的工作構成。如上圖五,財務控管這個工作由兩個部份,財務會計及財務預測所構成,而財務會計又可分為應收帳、應付帳及稽查三部份等。這樣子的角色階層基本上和企業的內部分工結構或是組織架構是平行的,比較不同的是角色階層是以工作內容為主,而組織架構的著眼點則在於管理、監督及評估。而且在角色階層中我們所描 述的是角色之間的關係,而組織架構圖中描述的是職位之間的從屬關係。例如圖六的組織圖,基本上和圖五的角色階層是互相平行的。

這樣的角色階層會衍生出一些相關的議題。第一是委派(Delegation)或代理的問題。委派主要有兩種:使用者對使用者,即一個使用者可以將部份或全部權限委派給另一個使用者,另一種則是角色對角色。委派基本上是一種分工及權力下放的機制,因此,要有組織的政策,即哪些權限可以委派,哪些權限則否,哪些角色可以代理另一較資深角色等,都必須要有規範。第二個議題是組織管理的問題,最常見的是責任分離(Separation of Duty),指的是兩個不同的角色,不能分配給同一個使用者。這種情形主要是源自於企業內部的分工或稽查的需求,或是兩個角色之間有利益的衝突。例如說會計和稽核這兩個角色,通常不會分配給同一個使用者。但是在角色階層中,如圖六,財務長會同時繼承會計及稽核這兩個角色的權限,因此,就不符合責任分離的要求。這個問題,就理論上而言,到目前並沒有一個好的答案。

最後一種角色階層是依地理位置或分支機構而形成。譬如一個公司可能依區域而分為東、西、南、北四區,而北區又分為台北市、台北縣、桃園縣、基隆市等。同一個角色,在不同區域的不同城市之分支,可能會有不同的權限。例如某銀行的台北分行的行員,一般只能存取該分行的客戶資料,而不能存取其他分行的客戶資料。而台北市內分行的 營業範圍,也可能多於其他較偏遠地區的分行,而台北市內分行的行員也會擁有較多的權限。因此,透過地理位置的劃分及特性,也可能會形成另一種角色階層。

結論

在一個以角色為主的權限控管系統中,角色階層及權限繼承,由於可以和企業的管理架構或組織架構相互結合,因此,提供了系統管理者不少的方便。而且現代許多企業,因為組織龐大,在實際上不可能完全採取集中式的管理,而必須分權管理,因此,角色階層提供了一個授權或分權管理的架構。例如一個銀行的地區性分行,可以自行管理 自己分行內角色及權限的設定,這樣不僅可以減輕中央集權式的管理負擔,而且不同的分行也可以因區域性的不同需求,而自行採取不同的控管政策。

雖然在權限控管上可以分層負責,但在實務上仍然可以採取中央集權式的管理模式,亦即中央管理人員(即組織上層)仍然可以取消或授予地區性(即組織下層)管理人員設定權限的權力。

角色權限雖然給予系統管理者一些方便,但是也衍生出一些問題,主要是責任分離(Separation of Duty)相關的問題。就企業而言,因為利益衝突(Conflict of Interest )的關係,有些角色不能同時分配給同一個使用者,例如會計和出納這兩個角色通常不會是同一個人,但是由於角色繼承的關係,這二者的共同主管將會同時擁有這兩者的權限,因此,違反了責任分離的原則。這樣的問題,雖然在實務上,可以依個別的狀況,來做特殊的處理,在理論上並沒有一個好的解決方式。但是,由於角色階層和權限繼承 仍然提供系統管理者不少方便,因此,大部份的系統仍會支援這樣的機制。