欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于堆棧的訪問控制的制作方法

文檔序號:6418931閱讀:174來源:國知局
專利名稱:基于堆棧的訪問控制的制作方法
相關申請本申請是1997年12月11日提交的、序號為08/988,431號美國專利申請的部分連續(xù)申請,其中美國專利申請的發(fā)明名稱為“對資源訪問的控制”,其內(nèi)容通過引用包括在此。
下列美國專利申請是本申請的依據(jù),并通過引用包括在此申請中。
1997年12月11日提交的、序號為____號美國專利申請,其發(fā)明名稱為“在計算機系統(tǒng)中提供安全性的保護域”。
1997年12月11日提交的、序號為____號美國專利申請,其發(fā)明名稱為“安全級別解決方案、裝載和定義”。
1997年12月11日提交的、序號為____號美國專利申請,其發(fā)明名稱為“分類的、參數(shù)化的且可擴展的訪問控制許可”。
1997年6月26日提交的、序號為08/883,636號美國專利申請,其發(fā)明名稱為“用于通信信道的與層次無關的安全性”。
1998年2月26日提交的、序號為60/076,048號美國臨時專利申請,其發(fā)明名稱為“分布式計算系統(tǒng)”。
1998年3月20日提交的、序號為09/044,923號美國專利申請,其發(fā)明名稱為“租用存儲器的方法和系統(tǒng)”。
1998年3月20日提交的、序號為09/044,838號美國專利申請,其發(fā)明名稱為“在分布式系統(tǒng)中用于委托確認租用的方法、裝置和產(chǎn)品”。
1998年3月20日提交的、序號為09/044,834號美國專利申請,其發(fā)明名稱為“在分布式系統(tǒng)中用于分組成員資格租用的方法、裝置和產(chǎn)品”。
1998年3月20日提交的、序號為09/044,916號美國專利申請,其發(fā)明名稱為“用于失效檢測的租用”。
1998年3月20日提交的、序號為09/044,933號美國專利申請,其發(fā)明名稱為“在基于事件的系統(tǒng)中用于傳輸行為的方法”。
1998年3月20日提交的、序號為09/044,919號美國專利申請,其發(fā)明名稱為“在分布式系統(tǒng)中用于事件通知的對象的延遲重構(gòu)和遠程裝載”。
1998年3月20日提交的、序號為09/044,938號美國專利申請,其發(fā)明名稱為“用于遠程方法啟用的方法和設備”。
1998年3月20日提交的、序號為09/045,652號美國專利申請,其發(fā)明名稱為“用于確定性散列以識別遠程方法的方法和系統(tǒng)”。
1998年3月20日提交的、序號為09/044,790號美國專利申請,其發(fā)明名稱為“在決定分布式系統(tǒng)中用于確定遠程對象之狀態(tài)的方法和設備”。
1998年3月20日提交的、序號為09/044,930號美國專利申請,其發(fā)明名稱為“在分布式系統(tǒng)中用于進行與遠程過程調(diào)用相關聯(lián)的處理的可下載的智能代理”。
1998年3月20日提交的、序號為09/044,917號美國專利申請,其發(fā)明名稱為“遠程方法的掛起和繼續(xù)”。
1998年3月20日提交的、序號為09/044,835號美國專利申請,其發(fā)明名稱為“在數(shù)據(jù)庫中用于多入口和多模板匹配的方法和系統(tǒng)”。
1998年3月20日提交的、序號為09/044,839號美國專利申請,其發(fā)明名稱為“在數(shù)據(jù)庫中用于原地修改的方法和系統(tǒng)”。
1998年3月20日提交的、序號為09/044,945號的美國專利申請,其發(fā)明名稱為“在數(shù)據(jù)庫中用于類型安全屬性匹配的方法和系統(tǒng)”。
1998年3月20日提交的、序號為09/044,931號的美國專利申請,其發(fā)明名稱為“在分布式系統(tǒng)中的動態(tài)查找服務”。
1998年3月20日提交的,序號為09/044,939號的美國專利申請,其發(fā)明名稱為“在分布式系統(tǒng)中用于提供為與一個裝置通信而使用的可下載代碼的設備和方法”。
1998年3月20日提交的、序號為09/044,826號的美國專利申請,其發(fā)明名稱為“便于訪問查找服務的方法和系統(tǒng)”。
1998年3月20日提交的、序號為09/044,932號的美國專利申請,其發(fā)明名稱為“在分布式系統(tǒng)中用于動態(tài)地驗證信息的裝置和方法”。
1998年2月26日提交的、序號為09/030,840號的美國專利申請,其發(fā)明名稱為“在網(wǎng)絡上進行動態(tài)分布計算的方法和裝置”。
1998年3月20日提交的,序號為09/044,936的美國專利申請,其發(fā)明名稱為“用于持久共享存儲空間的交互式設計工具”。
1998年3月20日提交的,序號為09/044,934的美國專利申請,其發(fā)明名稱為“基于多形態(tài)令牌的控制”。
1998年3月20日提交的、序號為09/044,944的美國專利申請,其發(fā)明名稱為“基于堆棧的安全性要求”。
1998年3月20日提交的,序號為09/044,837的美國專利申請,其發(fā)明名稱為“安全性要求的按照方法指定”。
背景技術
本發(fā)明針對計算機系統(tǒng)中的安全措施,尤其針對這樣的系統(tǒng)和方法,它們根據(jù)代碼源和委托方的身份控制對資源的訪問,這里正以所述委托方的名言執(zhí)行代碼。
當大量使用計算機系統(tǒng)時,各種組織變得越發(fā)依賴于它們。計算機系統(tǒng)的故障會嚴重地防礙組織的工作。因此,使用計算機系統(tǒng)的組織很容易受用戶的攻擊,用戶可以有意或無意地造成計算機系統(tǒng)發(fā)生故障。
一種損害計算機系統(tǒng)安全性的途徑是使計算機系統(tǒng)執(zhí)行在該計算機系統(tǒng)上完成有害動作的軟件。存在各種類型的安全性措施,它們可以用來防止計算機系統(tǒng)執(zhí)行有害軟件。一個例子是用“病毒”檢查程序檢查計算機系統(tǒng)執(zhí)行的所有軟件。但是,病毒檢查程序只搜索非常特殊的軟件指令。因此,病毒檢查程序無法識破許多軟件竄改機理。
另一種常用的、用來防止軟件竄改計算機資源的措施是“信任開發(fā)者方法(trusted developers approach)”。根據(jù)該信任開發(fā)者方法,系統(tǒng)管理者對軟件進行限制,使得計算機系統(tǒng)只能訪問由信任軟件開發(fā)者開發(fā)的軟件。信任開發(fā)者例如可以包括眾所周知的賣主或內(nèi)部開發(fā)者。
信任開發(fā)者方法的基本原則是,由開發(fā)者創(chuàng)建計算機程序,并且相信一些開發(fā)者生產(chǎn)的是不危害安全性的軟件。信任開發(fā)者方法的基本原則還有,計算機系統(tǒng)只執(zhí)行這樣的程序,它們存儲在由系統(tǒng)管理者控制的位置上。
目前已經(jīng)開發(fā)的、用于運行應用程序的方法包括,自動和立即執(zhí)行通過網(wǎng)絡從遠程源下載的軟件代碼。當網(wǎng)絡包括的遠程源處于系統(tǒng)管理者的控制之外時,信任開發(fā)者方法不起作用。
有一種傳統(tǒng)的嘗試可以使信任開發(fā)者方法適應于能夠執(zhí)行來自遠程源之代碼的系統(tǒng),這種嘗試稱為信任源方法。信任源方法的的一個重要概念是,從哪里接收程序(即,程序的“源”)的位置標識了程序的開發(fā)者。結(jié)果,可以用程序源確定該程序是否來自一個被信任的開發(fā)者。如果源與信任的開發(fā)者相關,那么認為該源是“信任源”,并且允許執(zhí)行代碼。
信任源方法的一種實施稱為沙盒法(sand box method)。沙盒法允許執(zhí)行所有代碼,但對遠程代碼有約束。具體地說,沙盒法允許所有信任代碼對計算機系統(tǒng)的資源作全訪問,而允許所有遠程代碼對資源作有限訪問。通常在計算機系統(tǒng)擁有者或管理者的直接控制下,信任代碼存儲在本地的計算機系統(tǒng)上,這里系統(tǒng)的擁有者或管理者負責信任代碼的安全性。
沙盒法的一個缺點是該方法不太靈活,因為它限制遠程代碼訪問相同有限資源集。于是,當來自幾個源的遠程代碼試圖訪問相同的資源時,矛盾就產(chǎn)生了。因此,傳統(tǒng)的系統(tǒng)經(jīng)常限定來自一個源的遠程代碼訪問一組計算機資源,并且限定來自另一個源的遠程代碼訪問另一組不同的計算資源。例如,系統(tǒng)限定通過網(wǎng)絡從有關第一計算機的源裝入的遠程代碼可以訪問一組文件,并且類似地限定通過網(wǎng)絡從有關第二計算機的源裝入的遠程代碼可以訪問另一組文件。
與沙盒法相比,提供安全性措施允許更大的靈活性,它包括在委托方和許可之間建立一組復雜的關系。“委托方”是計算機系統(tǒng)中給予許可的實體。委托方的例子包括用戶、組織、過程、對象和線程?!霸S可”是計算機系統(tǒng)允許委托方執(zhí)行一特定動作或功能的授權。
向委托方分配許可的任務因復雜的過程可以包含多源代碼的相互作用而復雜化。例如,由一委托方(例如,線程)正在執(zhí)行的第一信任源的代碼可以引起執(zhí)行第二信任源的代碼,然后引起執(zhí)行第三不信任源的代碼。
即使當執(zhí)行第二信任源代碼和第三不信任源代碼時委托方保持不變,執(zhí)行第二信任源代碼時適合于委托方的訪問特權可能不同于執(zhí)行第三不信任源代碼時適合于委托方的訪問特權。因此,當委托方執(zhí)行的代碼源改變時,適合該委托方的訪問特權可以動態(tài)地變化。
當名義上執(zhí)行代碼的委托方改變時,訪問特權也可以動態(tài)地變化。有時,一個委托方以另一個委托方的名義執(zhí)行代碼。例如,當一個計算機上的委托方請求訪問另一個遠程計算機上的資源時,該請求會在遠程計算機上調(diào)用“遠程”委托方,以便處理該請求。遠程委托方對請求的處理包括執(zhí)行信任源的代碼和不信任源的代碼。在這些情況下,傳統(tǒng)系統(tǒng)繼續(xù)使代碼訪問特權基于代碼源,不考慮名義上執(zhí)行代碼的委托方。由于沒有考慮名義上執(zhí)行代碼的委托方,所以傳統(tǒng)系統(tǒng)忽視了一種妨害安全性的可能情況。
基于以上描述,顯然希望開發(fā)一種用于確定合適代碼訪問特權的安全機制。

發(fā)明內(nèi)容
符合本發(fā)明原理的系統(tǒng)和方法用以下方法解決上述需求,即根據(jù)代碼源和名義上執(zhí)行代碼的委托方來確定對代碼的訪問控制。由于根據(jù)這些因素中的一種或兩者調(diào)節(jié)代碼訪問,所以可以提高計算機系統(tǒng)中的安全性。
符合本發(fā)明原理的一個系統(tǒng)調(diào)節(jié)資源訪問,其中所述資源是由計算機上執(zhí)行的一個操作所請求的。所述操作調(diào)用多個方法,這些方法在執(zhí)行期間會對代碼進行操作。系統(tǒng)包括一個策略文件、一個調(diào)用堆棧和一個執(zhí)行裝置。策略文件存儲了對資源的許可。許可根據(jù)代碼的源和代碼的執(zhí)行者同意對資源進行特定類型的訪問。調(diào)用堆棧按操作的調(diào)用次序存儲方法和執(zhí)行者的表示。當調(diào)用堆棧上所有方法和執(zhí)行者的許可所授權的訪問類型包含操作所請求的方法時,執(zhí)行裝置同意訪問該資源。
附圖概述包括在本說明書中并構(gòu)成說明書一部分的附圖示出了本發(fā)明的一個實施例,附圖和說明書一起說明了本發(fā)明的目的、優(yōu)點和原理。在這些附圖中

圖1示出了符合本發(fā)明原理的計算機網(wǎng)絡;圖2示出了在符合本發(fā)明原理的一個實施例中圖1的計算機;圖3示出了在圖2計算機上執(zhí)行的代碼流;圖4例示了一種用于說明保護域之使用的安全性機制;圖5例示了通過使用圖4的策略文件而實現(xiàn)的策略;圖6示出了與圖2計算上執(zhí)行的線程相關的調(diào)用堆棧;和圖7是一流程圖,示出了在符合本發(fā)明原理的一個實施例中圖6檢查許可方法所執(zhí)行的處理。
詳細描述下面對本發(fā)明的詳細描述參照了附圖。在不同圖中的相同的標號表示相同或相似的單元。還有,下面的詳細描述并不限制本發(fā)明。本發(fā)明的范圍由所附的權利要求書來限定。
符合本發(fā)明原理的系統(tǒng)和方法通過對代碼靈活指定訪問特權,提高了安全性。這些系統(tǒng)和方法不僅使訪問特權依賴于代碼源(即,代碼是否被信任或不信任),而且使訪問特權依賴于名義上執(zhí)行代碼的委托方的身份(即,請求執(zhí)行代碼的委托方是否被信任或不信任)。
分布式系統(tǒng)的概述符合本發(fā)明的方法和系統(tǒng)在具有各種部件(包括硬件和軟件)的分布式系統(tǒng)(“例示的分布式系統(tǒng)”)中工作。例示的分布式系統(tǒng)(1)允許系統(tǒng)用戶在具有許多設備的網(wǎng)絡上共享服務和資源;(2)為編程人員提供允許開發(fā)穩(wěn)健的且安全的分布式系統(tǒng)的工具和編程模式;以及(3)簡化管理分布式系統(tǒng)的任務。為了完成這些目標,例示的分布式系統(tǒng)使用JavaTM編程環(huán)境,允許代碼和數(shù)據(jù)以無縫的方式在裝置間移動。因此,將例示的分布式系統(tǒng)放在Java編程環(huán)境的頂層,并且該分布式系統(tǒng)使用此環(huán)境的特性,包括由它提供的安全性以及很強的類型定義能力。1997年Sams.net出版的題為《Java 1.1開發(fā)者指南》對該Java編程環(huán)境作了更清楚的描述,其作者為Jaworski。
在例示的分布式系統(tǒng)中,不同的計算機和裝置聯(lián)合起來作為單個系統(tǒng)出現(xiàn)在用戶的面前。由于作為單個系統(tǒng)出現(xiàn),所以例示的分布式系統(tǒng)提供了簡單的訪問,以及單個系統(tǒng)能夠提供的共享能力,并且不喪失個人計算機或工作站的靈活性和個人化響應。例示的分布式系統(tǒng)可以包含成千上萬個裝置,它們由地理位置分散的用戶操作,但這些用戶都同意委托、管理和策略的基本主張。
在例示的分布式系統(tǒng)內(nèi)有服務的各種邏輯分組,其中服務由一個或多個裝置提供,而每個邏輯分組稱為“Djinn”?!胺铡笔侵赣脩?、程序、裝置或另一服務可以訪問的資源、數(shù)據(jù)和功能,并且所述資源、數(shù)據(jù)和功能是可以計算的、存儲相關的、通信相關的,或者與訪問另一用戶相關。作為Djinn一部分而提供的服務的例子包括諸如打印機、顯示器、盤片等裝置;諸如應用程序、實用程序等軟件;諸如數(shù)據(jù)庫和文檔等信息;以及系統(tǒng)的用戶。
用戶和裝置都可以參加Djinn。當加入Djinn時,用戶或裝置對Djinn增加零項或多項服務,并且可以在受安全性約束的情況下訪問其所包含的任何一個服務。因此,裝置和用戶聯(lián)合成一個Djinn,共同訪問其服務。在編程上,Djinn的服務作為Java編程環(huán)境的對象而出現(xiàn),其中Java編程環(huán)境可以包括其它對象、用不同編程語言編寫的軟件部分,或者硬件裝置。一個服務具有一個接口,用于定義對該服務可請求的操作,并且服務的類型決定了構(gòu)成該服務的接口。
圖1例示了分布式系統(tǒng)1000,它包括通過網(wǎng)絡1400連接互連的計算機1100、計算機1200和裝置1300。計算機1100和1200可以包括任何傳統(tǒng)的計算機,諸如IBM兼容機,甚至是“啞”(dumb)終端。在典型的操作期間,計算機1100和1200可以建立客戶一服務器關系,以便發(fā)送和獲得數(shù)據(jù)。
裝置1300可以是許多裝置中的任何一種,諸如打印機、傳真機、存儲裝置、計算機或其它裝置。網(wǎng)絡1400是局域網(wǎng)、廣域網(wǎng)或互聯(lián)網(wǎng)。盡管在構(gòu)成例示的分布式系統(tǒng)1000時,僅示出了兩個計算機和一個裝置,但本領域的熟練技術人員應該理解,例示的分布式系統(tǒng)100可以包括另外的計算機或裝置。
圖2更詳細地示出了計算機1100,顯示了例示分布式系統(tǒng)1100的許多軟件部件。本領域的熟練技術人員應該理解,計算機1200或裝置1300可以用類似的方式構(gòu)造。計算機1100包括存儲器2100、輔助存儲裝置2200、中央處理器(CPU)2300、輸入裝置2400和視頻顯示器2500。存儲器2100包括查詢服務2110、發(fā)現(xiàn)服務器2120和JavaTM運行時系統(tǒng)2130。Java運行時系統(tǒng)2130包括JavaTM遠程方法調(diào)用系統(tǒng)(RMI)2140和JavaTM虛擬機(JVM)2150。輔助存儲裝置2200包括JavaTM空間2210。
如上所述,例示的分布式系統(tǒng)1000基于Java編程環(huán)境,因此它使用Java運行時系統(tǒng)2130。Java運行時系統(tǒng)2130包括JavaTM應用程序設計接口(API),允許程序在Java運行時系統(tǒng)的頂層運行,以便按獨立于平臺的方式訪問各種系統(tǒng)功能,包括主操作系統(tǒng)的窗口化功能和網(wǎng)絡化能力。由于Java API為與移植了Java運行時系統(tǒng)2130的所有操作系統(tǒng)提供了單個公共的API,所述在Java運行時系統(tǒng)頂層運行的程序以獨立于平臺的方式運行,不必考慮主平臺的操作系統(tǒng)或硬件配置。Java運行時系統(tǒng)2130作為JavaTM軟件開發(fā)套件的一部分提供,而JavaTM軟件開發(fā)套件可以向加州Mountain View市的太陽微系統(tǒng)公司購買。
JVM 2150也促進了平臺獨立。JVM 2150象抽象計算機那樣工作,它按字節(jié)代碼的形式接收來自各程序的指令,并且通過動態(tài)地將字節(jié)代碼轉(zhuǎn)換成諸如目標代碼等執(zhí)行形式來解釋這些字節(jié)代碼,然后執(zhí)行。RMI 2140通過允許在一個計算機或裝置上執(zhí)行的對象調(diào)用另一個計算機或裝置上某對象的方法,來方便遠程方法調(diào)用。RMI可以位于JVM內(nèi),并且RMI和JVM兩者都作為Java軟件開發(fā)套件的一部分提供。
查詢服務2110定義了一特定Djinn可以使用的服務。也就是說,可以存在不止一個Djinn,因此例示的分布式系統(tǒng)1000內(nèi)有不止一個查詢服務。對于Djinn內(nèi)的每個服務,查詢服務2110包括一個對象,并且每個對象包括各種便于訪問相應服務的方法。查詢服務2110及其訪問在共同待批的美國專利申請第09/044,826號中有更詳細的描述,該專利申請的名稱為“便于訪問查找服務的方法和系統(tǒng)”,先前已通過引用包括在本申請中。
在稱作引導和加入或者發(fā)現(xiàn)的過程中,發(fā)現(xiàn)服務器2120檢測何時將新的裝置加到例示的分布式系統(tǒng)1000中,并且當檢測新的裝置時,發(fā)現(xiàn)服務器將一個查詢服務2110的引用傳送給新的裝置,從而新裝置可以向查詢服務登記其服務,并且變成Djinn的一員。在登記后,新裝置變成Djinn的一員,并且它可以訪問查詢服務2110中包含的所有服務。引導和參加的過程在共同待批的美國專利申請第09/044,939號中有更詳細的描述,該專利申請的發(fā)明名稱為“在分布式系統(tǒng)中用于提供為與一個裝置通信而使用的可下載代碼的設備和方法”,先前已通過引用包括在此。
Java空間2210是例示分布式系統(tǒng)1000內(nèi)各程序使用的一個對象資源庫,用于存儲對象。諸程序使用Java空間2210持久地存儲對象,并且使這些對象可以被例示分布式系統(tǒng)內(nèi)的其它裝置訪問。Java空間在共同待批的美國專利申請第08/971,529號中有更詳細的描述。該專利申請的發(fā)明名稱為“使用多形態(tài)入口和入口匹配的數(shù)據(jù)庫系統(tǒng)”,已轉(zhuǎn)讓給共同的受讓人,其申請日為1997年11月17日,其內(nèi)容通過引用包括在此。本領域的熟練技術人員應該理解,例示的分布式系統(tǒng)1000可以包含許多查詢服務、發(fā)現(xiàn)服務器和Java空間。
功能概述提供了一種安全性強制機制,它允許對線程的訪問許可根據(jù)目前正在執(zhí)行的代碼的源和執(zhí)行者隨時間而變化。代碼源表示代碼來自一個信任源還是一個不信任源。執(zhí)行者表示名義上執(zhí)行代碼的委托方。例如,執(zhí)行者可以是名義上在客戶機計算機上操作過程或程序的一個特定用戶,或者一個特定組織。
當正在執(zhí)行一個來自信任源的例程時,一般允許執(zhí)行該例程的線程可以更多地訪問資源。同樣,信任執(zhí)行者可以更多地訪問資源。
當一個例程調(diào)用另一個例程時,執(zhí)行這些例程的線程與這兩個例程共用的許可相關。因此,將線程的訪問等級限制成小于或等于允許任何一個例程的訪問等級。
本機制允許某些例程有“特權”。當確定線程是否能夠執(zhí)行一個動作時,只檢查與特權例程以及在線程之調(diào)用層次中位于該特權例程以上的例程相關的許可。
根據(jù)符合本發(fā)明的一個實施例,這里描述的安全性機制用許可對象和保護域?qū)ο髞泶鎯τ糜谀M系統(tǒng)安全性策略的信息。后文將更詳細地描述這些對象的特性和使用,以及用于動態(tài)確定線程之時變訪問特權的技術。
信任源和不信任源圖3示出了計算機1100(圖2)中執(zhí)行的代碼流3100。代碼流3100由諸如JVM 2150等代碼執(zhí)行單元3200執(zhí)行,并且源于零個或多個不信任流3300,或者零個或多個信任源3400。不信任源3300和信任源3400可以是文件服務器,包括與互聯(lián)網(wǎng)相連的文件服務器,或者其它類似的設備。不信任源一般不受計算機1100之操作人員的直接控制。這里將來自不信任源的代碼稱為不信任代碼。
由于不信任代碼被認為會給安全性帶來較大的風險,所以通常將不信任代碼可以訪問的計算機資源組限制成那些不會威脅安全性的資源。來自信任源的代碼通常是信任開發(fā)者開發(fā)的代碼。信任代碼被認為是可靠的,并且對安全性的威脅大大小于不信任代碼。
這里,將通過網(wǎng)絡從遠程源裝入的并且立即執(zhí)行的軟件代碼稱為遠程代碼。一般,遠程源是一個分立組織或個人的計算機系統(tǒng)。遠程源通常與互聯(lián)網(wǎng)相聯(lián)。
不信任代碼通常是遠程代碼。但是,來自計算機1100本地源的代碼會給安全性帶來較大的風險??梢詫碜赃@類本地源的代碼視為不信任源的不信任代碼。同樣,可以認為來自一特定遠程源的代碼是可靠的,并且風險相對較小,因此可以將其視為來自信任源的信任代碼。
根據(jù)符合本發(fā)明的一個實施例,用一種安全機制來實現(xiàn)以下安全性策略,即允許信任代碼比不信任代碼可以訪問更多的資源,即使信任代碼和不信任代碼由同一委托方執(zhí)行。一種安全性策略確定代碼執(zhí)行單元3200將允許代碼流3100中的代碼完成哪個動作。許可和保護域的使用通過允許相對較復雜的許可分組和關系,而允許策略超越簡單的信任/不信任的二分法策略。
參照圖4將更詳細地描述可以與分類許可結(jié)合使用的保護域和策略。
信任執(zhí)行者和不信任執(zhí)行者在名義上操作計算程序的用戶或組織(或者在某些情況下,該程序本身)被稱為“執(zhí)行者”(即,在名義上將訪問資源的委托方)。例如,計算機1200上的程序執(zhí)行者(“客戶機執(zhí)行者”)可以不同于計算機1100上的程序執(zhí)行者(“服務器執(zhí)行者”)。
代碼執(zhí)行單元3200以客戶機執(zhí)行者的名義通過RMI 2140(圖2)接收請求。作為響應,代碼執(zhí)行單元3200執(zhí)行線程之類的操作,以便處理請求。線程負責獲得合適的代碼和或資源,以滿足請求,并且一般將允許線程以服務器執(zhí)行者和客戶機執(zhí)行者中任何一個或兩者的名義進行操作。
代碼執(zhí)行單元3200允許授權的執(zhí)行者或“信任執(zhí)行者”更多地訪問計算機資源,因為信任執(zhí)行者不會給安全性帶來很大的風險。信任執(zhí)行者可以包括系統(tǒng)操作人員,它們需要更多地訪問計算機資源,以便處理系統(tǒng)更新或類似任務。未授權的執(zhí)行者或者“不信任執(zhí)行者”用不同方式對待。不信任執(zhí)行者被認為會給安全性帶來較大的風險,因此它們只能有限地訪問計算機資源。
根據(jù)符合本發(fā)明的一個實施例,用一種安全性機制來實現(xiàn)以下安全性策略,即允許信任執(zhí)行者比不信任執(zhí)行者能夠訪問更多資源,即使信任和不信任執(zhí)行者請求來自單一源的代碼。一種安全性策略確定了代碼執(zhí)行單元3200將允許哪些動作。許可和保護域的使用通過允許相對較復雜的許可分組和關系,而允許策略超越簡單的信任/不信任的二分法策略。
現(xiàn)在,參照圖4將更詳細地描述可以與分類許可結(jié)合使用的保護域和策略。
安全性機制舉例圖4例示了用于說明保護域之使用的安全性機制。例示的安全性機制包括策略文件4100、策略對象4200、域映射器對象4300,和一個或多個保護域?qū)ο?400。用代碼執(zhí)行單元3200實現(xiàn)安全性機制(圖3)。
代碼執(zhí)行單元3200執(zhí)行其從代碼流3100(圖3)接收到的代碼。為了便于說明,假設來自代碼流3100的代碼是面向?qū)ο蟮能浖?。結(jié)果,代碼是方法的形式,而所述方法與屬于類的對象相關。響應于代碼執(zhí)行單元3200執(zhí)行的代碼所體現(xiàn)的指令,代碼執(zhí)行單元3200建立一個或多個對象4500。一個對象是一個數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)所含的數(shù)據(jù)與使用該數(shù)據(jù)的過程或功能相結(jié)合。所有對象屬于一個類,諸如類4600。屬于一類的每個對象有相同的字段(“屬性”)和相同的方法。方法是用來操作對象的過程、功能或例程。對象被稱為對象所屬的類的一個“實例”。
一個或多個類定義包含在來自代碼流3100的代碼中。屬于一類的對象的字段和方法由類定義來限定。代碼執(zhí)行單元3200用這些類定義來創(chuàng)建對象,這些對象是由類定義定義的類的實例。
這些類定義由編程人員編寫的源代碼生成。例如,使用Java開發(fā)套件的編程人員將符合Java編程語言的源代碼輸入源文件。源代碼體現(xiàn)了類定義和用來生成字節(jié)代碼的其它指令,其中所述字節(jié)代碼用于控制代碼執(zhí)行單元3200的執(zhí)行。用于定義類并且生成由代碼執(zhí)行單元執(zhí)行的代碼的技術(諸如Java虛擬機)是本領域技術人員熟知的。
由來自代碼流3100的類定義所定義的每個類都與類名4620和代碼標識符4640相關。代碼執(zhí)行單元3200在類4600與其類名4620和代碼標識符4640之間保持一種聯(lián)系。代碼標識符4640表示代碼的源。
“代碼源”是表示從哪里接收到計算機指令的實體。代碼源的例子包括文件或永久對象,它存儲在通過網(wǎng)絡連接的數(shù)據(jù)服務器上;快閃EPROM閱讀器,它讀取存儲在快閃EPROM上的指令;或系統(tǒng)庫集。
在符合本發(fā)明的一個實施例中,代碼標識符4640是一個包含統(tǒng)一資源定位器(“URL”)4642和一組公共加密密鑰4644的組合記錄。URL標識一個特定的源。URL 4642是一個串,用來唯一標識與互聯(lián)網(wǎng)相連的任何服務器。URL4642還可以用來指示計算機1100的本地源。一般來說,URL 4642包括文件指示以及文件目錄,其中文件目錄是服務器正提供的代碼流的源。
這里,將公共加密密鑰稱為“密鑰”,它用來使數(shù)字簽名生效,其中數(shù)字簽名可以包含在用來傳輸相關代碼和數(shù)據(jù)的文件中。Schneier在1996年所著的“應用加密學”更詳細地描述了公共加密密鑰和數(shù)字簽名。密鑰4644可以包含在文件中,包含在使密鑰與源相關的數(shù)據(jù)庫中(例如URL),或者可以用其它技術訪問。
可以使一個類與包含在文件中的簽字簽名相關,而這里所述的文件是用來傳輸定義該類的代碼的,或者可以將類的類定義與一數(shù)字簽名具體關聯(lián)。與一個有效數(shù)字簽名相關的類稱為被簽名。有效數(shù)字簽名是可以用存儲在數(shù)據(jù)庫中的已知密鑰驗證的數(shù)字簽名。如果一個類與一個不能被驗證的數(shù)字簽名相關,或者該類與任何數(shù)字簽名無關,那么該類稱為未簽名。未簽名的類可以與一個缺省密鑰相關。一個密鑰可以與一個名稱相關,而所述名稱可以用來在數(shù)據(jù)庫在查找所述密鑰。
盡管將一個代碼標識符格式描述成包括表示源的數(shù)據(jù)(即,加密密鑰和URL),但也可以使用其它格式??梢杂帽硎敬a源的其它信息或其組合來表示代碼標識符。
執(zhí)行者標識符4700表示代碼的執(zhí)行者?!按a的執(zhí)行者”是在名義上執(zhí)行該代碼的委托方(例如,用戶或組織)。執(zhí)行者的例子可以包括例如“約翰T.施密斯”等個人,或者諸如“太陽微系統(tǒng)股份有限公司”等組織。因此,“執(zhí)行者標識符”是代表執(zhí)行者的標識符形式。執(zhí)行者標識符的可能例子包括串名、計算系統(tǒng)登錄名和雇員編號。當服務器通過RMI接收到來自一客戶機的請求時,該服務器可以要求將客戶機執(zhí)行者的授權作為正在以客戶機執(zhí)行者的名義執(zhí)行客戶機程序的證據(jù)。
保護域和許可根據(jù)符合本發(fā)明的一個實施例,保護域用來加強計算機系統(tǒng)內(nèi)的安全性。當以執(zhí)行者的名義正在執(zhí)行來自一個或多個源的代碼時,保護域可以看作是一組授予一個或多個執(zhí)行者的許可。許可是計算機系統(tǒng)作出的授權,它允許委托方執(zhí)行一特定的動作或功能。一般地說,許可包括同意用一種特定的方法訪問計算機資源。授權的一個例子是同意將一特定目錄“寫”在文件系統(tǒng)(例如,/home)中。
在計算機系統(tǒng)中可以用許多方式來表示許可。例如,包含文本指令的數(shù)據(jù)結(jié)構(gòu)可以表示許可。諸如“許可執(zhí)行者寫/somedirectory/somefile”等指令表示允許以委托方“執(zhí)行者”的名義對“/somedirectory”目錄中的“somefile”文件進行寫操作。該指令表示同意哪個特定的動作,允許執(zhí)行該動作的執(zhí)行者,以及同意在其上執(zhí)行該特定動作的計算機資源。在該例中,被授權的特定動作將以委托方“執(zhí)行者”的名義進行“寫”。同意在其上執(zhí)行特定動作的計算機資源是計算機1100之文件系統(tǒng)中的一個文件“/somedirectory/somefile”。在本例中,用本領域熟練技術人員已知的傳統(tǒng)形式表達了該文件以及包含該文件的目錄。
許可還可以用對象表示,這里稱為許可對象。對象的屬性表示一特定許可。例如,一個對象可以包括“寫”的動作屬性和“/somedirectory”的目標資源屬性。許可對象可以具有一個或多個許可驗證法,這些方法用來確定由該許可對象表示的特定許可是否授權被請求的許可。
策略許可、執(zhí)行者和代碼源之間的關聯(lián)構(gòu)成了系統(tǒng)的安全性策略。系統(tǒng)的策略可以用一個或多個包含指令的文件來表示。每個指令在一特定的訪問標識符和一特定的授權許可之間建立一種映射。訪問標識符由一個執(zhí)行者標識符和一個代碼標識符組成。當以指令中訪問標識符的執(zhí)行標識符所規(guī)定的執(zhí)行者的名義操作對象時,指令中規(guī)定的許可適用于所有屬于下述類的對象,其中所述類與指令中訪問標識符所規(guī)定的代碼標識符相關。
圖5例示了通過使用策略文件4100(圖4)而實現(xiàn)的策略。例示策略文件4100中的指令格式是<“permission”><executor><URL><key name><action><target><executor>標識代碼的執(zhí)行者;<URL>與對應于<key name>的密鑰的結(jié)合構(gòu)成一代碼源;而<action>和<target>表示一許可。密鑰與密鑰名相關。密鑰和對應的密鑰名一起存儲在一個密鑰數(shù)據(jù)庫中。密鑰名可用來尋找密鑰數(shù)據(jù)庫的密鑰。例如,考慮以下指令permission executorl file//somesource somekey write/tmp/*上述指令表示授權對“executorl”執(zhí)行者的許可,許可其用一對象在“/tmp/*”中寫任何文件,而所述對象屬于與“file//somesource”-“somekey”(即,URL-密鑰名)代碼源相關的類。
隱含許可一個許可不必正好與另一個許可匹配,才能認為其被另一個許可所“包含”。當?shù)谝辉S可包含第二許可,但不與第二許可匹配時,稱第一許可為“隱含”了第二許可。例如,一個要在諸如“c/,”目錄中寫任何文件的許可隱含了一個要在諸如“c/thisfile.”的目錄中寫任何具體文件的許可。作為另一個例子,一個準許“太陽微系統(tǒng)股份有限公司的所有在職雇員”讀取“d/log”文件的許可隱含著一個準許“同一組織中某個具體雇員”讀取“d/log”文件的許可。
如果用許可對象表示許可,那么該許可對象的驗證法包含了用于確定一個許可是否被另一個隱含的代碼。例如,一個要將文件寫入目錄中的許可隱含了一個要將特定文件寫入該目錄的許可,并且一個要從目錄中讀取文件的許可隱含了要從該目錄中讀取特定文件的許可。但是,寫許可不隱含讀許可。
策略實施對象可以用各種對象將訪問標識符表示的策略實現(xiàn)成策略文件4100中包含的許可映射。根據(jù)圖4所示的實施情況,為了有效地且方便地實施策略,提供了策略對象4200、域映射器對象4300、一個或多個保護域?qū)ο?400,以及一個或多個訪問標識符4800。
策略對象4200是用于存儲例如從策略文件4100中獲得的策略信息的對象。具體地說,策略對象4200提供了訪問標識符到許可的映射,并且策略對象4200是根據(jù)策略文件4100內(nèi)的指令構(gòu)造的。在策略對象4200內(nèi),訪問標識符及其相關的授權許可可以用數(shù)據(jù)結(jié)構(gòu)或?qū)ο髞肀硎尽?br> 當域映射器對象4300遇到新的訪問標識符4800時,根據(jù)請求建立保護域?qū)ο?400。當接收到一個訪問標識符4800時,域映射器對象4300確定保護域?qū)ο?400是否已經(jīng)與該訪問標識符4800相關。域映射器對象4300保持這樣的數(shù)據(jù),它們表示哪些保護域?qū)ο笠呀?jīng)建立以及與這些保護域?qū)ο笙嚓P的訪問標識符。如果一個保護域?qū)ο笠呀?jīng)與訪問標識符相關,那么域映射器對象4300將訪問標識符和保護域?qū)ο蟮挠成浼拥接捎蛴成淦鲗ο?300保持的訪問標識符和保護域?qū)ο蟮挠成渲小?br> 如果一個保護域?qū)ο笈c訪問標識符無關,那么建立一個新的保護域?qū)ο?,并且將其與許可填充(populate)。根據(jù)策略對象4200中訪問標識符與許可的映射關系,將保護域?qū)ο笈c映射到該訪問標識符的那些許可填充。最后,如前所述,域映射器對象4300將該訪問標識符與保護域?qū)ο蟮挠成潢P系加到訪問標識符與保護域?qū)ο蟮挠成渲小?br> 在符合本發(fā)明的其它實施例中,不把訪問標識符與保護域?qū)ο蟮挠成浯鎯υ谟蛴成淦鲗ο笾校菍⒂成渥鳛殪o態(tài)字段存儲在保護域類中。保護域類是保護域?qū)ο?400所屬的類。無論有多少對象屬于一個類,該類只有一個靜態(tài)字段的實例。表示保護域?qū)ο笠呀?jīng)建立以及與該保護域?qū)ο笙嚓P的訪問標識符的數(shù)據(jù)存儲在保護域類的靜態(tài)字段中。
靜態(tài)方法用來訪問和更新上述靜態(tài)數(shù)據(jù)。用整個類的名義調(diào)用靜態(tài)方法,并且無需參照具體的對象就可以調(diào)用靜態(tài)方法。
調(diào)用堆棧舉例用上述許可對象、保護域?qū)ο蠛筒呗詫ο髞泶_定線程的訪問權。根據(jù)符合本發(fā)明的一個實施例,這類訪問權根據(jù)線程目前正在執(zhí)行哪個代碼以及正在以哪個執(zhí)行者的名義執(zhí)行線程,而隨時間變化。導致執(zhí)行線程目前正在執(zhí)行之代碼的調(diào)用順序反映在線程的調(diào)用堆棧中。應該參照例示的調(diào)用堆棧說明對安全性機制的操作過程,這種安全性機制以允許訪問權隨時間變化的方式加強了訪問權。
圖6是一方框圖,它包括與線程6200相關的調(diào)用堆棧6100,在線程6200中,對象4500-1的方法6300調(diào)用另一對象4500-2的方法6300-2,方法6300-2調(diào)用又一對象4500-3的方法6300-3,方法6300-3再調(diào)用訪問控制器對象6500的檢查許可方法6400。
線程6200是在計算機1100上執(zhí)行的線程。調(diào)用堆棧6100是一堆棧數(shù)據(jù)結(jié)構(gòu),它表示在任何給定實例下線程6200調(diào)用的方法的調(diào)用層次。在圖6所示的實例下,調(diào)用堆棧6100為線程6200執(zhí)行的但還沒有結(jié)束的每個方法都包含一個幀(例如幀6100-1)。
每幀對應于已被線程6200調(diào)用但還沒有結(jié)束的方法。各幀在調(diào)用堆棧6100上的相對位置反映了與幀對應的方法的調(diào)用次序。當一個方法結(jié)束時,從調(diào)用堆棧6100的頂層除去對應于該方法的幀。當調(diào)用一個方法時,對應于該方法的幀加到調(diào)用堆棧6100的頂層上。
每幀都包含有關方法以及對應該幀的對象的信息。根據(jù)該信息,通過調(diào)用由代碼執(zhí)行單元3200為每個對象提供的“獲得類”方法,可以確定該方法的類。然后,根據(jù)代碼執(zhí)行單元3200保持的聯(lián)系,確定此類的代碼標識符。每幀還包含在名義上執(zhí)行線程的執(zhí)行者的執(zhí)行者標識符(例如,執(zhí)行者標識符4700-1)。然后,將執(zhí)行者標識符和代碼標識符組成一個訪問標識符(例如,訪問標識符4800-1)。根據(jù)域映射器對象4300中的映射,可以確定與給定幀的訪問標識符相關的保護域?qū)ο蟆?br> 例如,假設線程6200調(diào)用方法6300-1。當執(zhí)行方法6300-1時,線程6200調(diào)用方法6300-2。當執(zhí)行方法6300-2時,線程6200調(diào)用方法6300-3。當執(zhí)行方法6300-3時,線程6200調(diào)用方法6400。這里,如圖6所示,調(diào)用堆棧6100表示方法的調(diào)用的層次。幀6100-4對應于方法6400,幀6100-3對應于方法6300-3,幀6100-2對應于方法6300-2,幀6100-1對應于方法6300-1。當線程6200結(jié)束方法6400時,從調(diào)用堆棧6100中去除幀6100-4。
方法/許可關系調(diào)用堆棧6100上的每個幀與一組許可相關。對于一給定的幀,其許可組由保護域?qū)ο蟠_定,而保護域?qū)ο笈c針對給定方法的代碼的源以及在名義上執(zhí)行代碼的委托方相關。現(xiàn)在繼續(xù)參照圖6,描述幀、保護域和許可之間的關系。
保護域?qū)ο?400-1從訪問標識符4800-1映射,其中訪問標識符4800-1由執(zhí)行者標識符4700-1和對象4500-1的類的代碼標識符組成。對象4500-1的方法6300-1以執(zhí)行者標識符4700-2的名義調(diào)用對象4500-2的方法6300-2。保護域?qū)ο?400-2從訪問標識符4800-2映射,其中訪問標識符4800-2由執(zhí)行者標識符4700-2和對象4500-2的類的代碼標識符組成。對象4500-2的方法6300-2以執(zhí)行者標識符4700-3的名義調(diào)用對象4500-3的方法6300-3。保護域?qū)ο?400-3從訪問標識符4800-3映射,其中訪問標識符4800-3由執(zhí)行者標識符4700-3和對象4500-3的類的代碼標識符組成。
當用保護域?qū)ο蠼M織和確定特定執(zhí)行者和代碼源的訪問權時,必須提供一些機制用以確定線程的訪問權,其中線程具有一調(diào)用堆棧,調(diào)用堆棧具有多個方法,而方法的代碼來自多個源,或者方法的代碼被請求以多個委托方的名義執(zhí)行。根據(jù)符合本發(fā)明的一個實施例,如下文將更詳細描述的,該確定由訪問控制器對象完成。
訪問控制器舉例根據(jù)符合本發(fā)明的一個實施例,用訪問控制器對象確定某個線程是否可以執(zhí)行一特定的動作。具體地說,在資源管理對象訪問一資源之前,資源管理對象(例如,對象6300-3)調(diào)用訪問控制器對象6500的檢查許可方法6400。
在說明的例子中,資源管理方法6300-3調(diào)用訪問控制器對象6500的檢查許可方法6400,以便確定是否授權訪問該資源。為了做出該決定,訪問控制器對象6500的檢查許可方法6400執(zhí)行參照圖7所述的步驟。
確定是否授權一個動作根據(jù)符合本發(fā)明的一個實施例,如果在發(fā)出一個授權請求時與線程相關的每個保護域?qū)ο笾卸及瑘?zhí)行一動作所需的許可,那么同意執(zhí)行該動作。如果在與一保護域?qū)ο笙嚓P的一個或多個許可中包含了某個許可,那么稱該許可包含在所述保護域?qū)ο笾?。例如,如果某個動作要求許可以“Bob”委托方的名義對“e/tmp”目錄中的文件進行寫操作,那么如果保護域?qū)ο?400-1明顯包含或隱含該許可,那么該被要求的許可將包含在保護域?qū)ο?400-1中。
假設當線程6200通過調(diào)用檢查許可方法6400請求確定是否同意執(zhí)行一動作時,線程6200正在執(zhí)行6300-3。再假設線程6200已調(diào)用了方法6300-1、方法6300-2和方法6300-3,并且當線程6200調(diào)用方法6400時這些方法還沒有結(jié)束。當請求確定授權時與線程6200相關的保護域?qū)ο笥杀Wo域?qū)ο?400-1、4400-2和4400-3表示。
對于本例中所給的調(diào)用層次,如果保護域?qū)ο?400-1中包含的唯一許可是“寫入e/tmp”,那么不會將下述所需許可授權給線程6200,其中所述所需許可是執(zhí)行以下動作,即以“Bob”的名義對文件“d/sys/pwd”進行寫操作。不授權的理由是,保護域?qū)ο?400-1中包含任何許可不包括所需求的許可。
特權方法有時需要同意執(zhí)行下述動作,即執(zhí)行一個方法,但不考慮與線程之調(diào)用層次中位于該方法之前的諸方法相關的保護域?qū)ο?。更新口令是這種需要的一個例子。
具體地說,由于口令文件的安全性要求是嚴格的,所以將更新口令文件所需的許可局限于非常少的專用保護域?qū)ο蟆R话愕卣f,這類保護域?qū)ο笈c來自信任代碼和信任執(zhí)行者的對象的方法相關,其中信任執(zhí)行者提供其自身的安全性機制。例如,用于更新口令的方法可以在為用戶更新新口令之前向該用戶要求舊的口令。方法還要求在名義上請求更新的委托人的授權,并且只對授權的委托方準許更新口令。
由于將更新口令的許可局限于來自特定源的代碼和以特定授權委托方執(zhí)行的代碼,所以不允許來自其它源或委托方的代碼更新口令。即使在諸如圖6所示的情況下,來自一遠程源(方法6300-1)代碼試圖通過調(diào)用具有更新口令之許可的信任代碼(方法6300-3)來改變口令,也是這樣。在該情況下拒絕方法的理由是,調(diào)用層次中至少有一個方法(方法6300-1)不具備必要的許可。
根據(jù)符合本發(fā)明的一個實施例,提供了一種特權機制,用以允許本身不具有許可的方法執(zhí)行動作,通過調(diào)用具有許可的特殊“特權”方法執(zhí)行這些動作。通過把被認為與“線程相關”保護域?qū)ο缶窒抻谂c“特權”方法和調(diào)用層次中在該特權方法之后的諸方法相關的保護域?qū)ο?,可以獲得上述結(jié)果。
通過調(diào)用例如稱為beginPrivilege的特權對象的一個方法,方法可以使其本身獲得特權(即,允許特權機制)。通過調(diào)用例如稱為endPrivilege的特權對象的另一個方法,方法可以使其本身失去特權(即,禁止特權機制)。以下代碼舉例說明一項技術,該技術用于調(diào)用方法允許或禁止特權機制。盡管代碼示例可以象太陽微系統(tǒng)股份有限公司的Java編程語言,但該例只是說明性的,不代表實際的代碼實施。
<pre listing-type="program-listing"><![CDATA[Privileged p=new Privileged();p.beginPrivilege();try{[sensitive code]} finally{ p.endPrivilege();}]]></pre>
代碼示例的第一行建立一特權對象。第二行調(diào)用允許特權機制的特權對象的beginPrivilege方法?!皌ry finally”語句確保在執(zhí)行“finally”之后的代碼塊時不考慮執(zhí)行“try”和“finally”之間塊期間所發(fā)生的事。因此,總是調(diào)用特權對象(“p.endPrivilege()”)的特權禁止方法。
例如,可以使用上述代碼限制方法6300-3中實際訪問口令文件的部分。訪問口令文件的部分將包含在用“[sensitive code]”表示的塊中。由上述代碼示例說明的技術明確地將特權機制允許和禁止的責任交給了編程人員。
通常,當執(zhí)行一特權方法時,線程可以調(diào)用與不包括特權保護域?qū)ο笾兴S可的其它保護域?qū)ο笙嚓P的后續(xù)方法。當線程正在執(zhí)行一后續(xù)方法時,如果所要求的許可包含在與該后續(xù)方法和調(diào)用層次中位于該后續(xù)方法特權方法之間的任何方法相關的保護域?qū)ο笾袝r,只同意由該線程請求的動作。用這種方式限制特權機制的好處是,當特權方法調(diào)用不信任代碼和不信任執(zhí)行者的方法時,可以防止不信任代碼和不信任執(zhí)行者的方法有效地“借用”與信任代碼和信任執(zhí)行者的特權方法相關的許可。
在符合本發(fā)明的另一個實施例中,方法通過調(diào)用訪問控制器類的靜態(tài)方法使其本身具備特權或不具備特權。該訪問控制器類是訪問控制器對象所屬的類。如以下代碼示例所證明的,使用與訪問控制器類相關的靜態(tài)方法避免了必須建立一特權對象來允許特權機制。
以下代碼示例說明了一項技術,該技術調(diào)用允許或禁止特權機制的方法。為了便于說明,假設訪問控制器類的名稱是AccessControl。盡管代碼示例可以象太陽微系統(tǒng)股份有限公司的Java編程語言,但該例只是說明性的,不代表實際的代碼實施。
<pre listing-type="program-listing"><![CDATA[AccessControl.beginPrivilege();try{ [sensitive code]} finally{ AccessControl. endPrivilege();}]]></pre>允許調(diào)用線程可以在調(diào)用層次的不同層面上調(diào)用同一方法。例如,方法X可以調(diào)用方法Y,方法Y可以調(diào)用方法X。結(jié)果,可以二次調(diào)用作為特權方法被調(diào)用的方法,諸如6300-2,但在第二次調(diào)用時不允許特權機制。為了在使特權機制工作時適當?shù)卮_定與線程相關的保護域?qū)ο?,提供一種機制,用以跟蹤特權方法的哪一次調(diào)用允許特權機制。將線程允許特權機制的調(diào)用稱為“允許調(diào)用”。
用于跟蹤特定方法的哪次調(diào)用是允許調(diào)用的一項技術是,在對應于每個允許調(diào)用的幀中設置一標志。其實現(xiàn)方法是,當在執(zhí)行一方法期間調(diào)用每個特權允許對象的特權允許方法時,在對應于每個允許調(diào)用的幀中設置特權標志6150。
根據(jù)符合本發(fā)明的一個實施例,每個幀都有一個特權標志值。當把任何幀加入調(diào)用堆棧6100時,特權標志的初始值表示相應的方法沒有被特權。當相應方法具有特權時,任何幀的特權標志只設置為表示相應方法被特權的值。
在允許特權機制的某個方法結(jié)束之后,特權標志6150的值不會轉(zhuǎn)移方法的下一次調(diào)用。標志值不會轉(zhuǎn)移的原因是,當把對應于該方法的新幀加入調(diào)用堆棧6100時,將特權標志的初始值設置成表示相應方法沒有特權。當特權方法結(jié)束,用這種方法保持特權標志的值可以禁止特權機制,不必考慮編程人員是否明確地禁止特權機制。
圖7是一流程圖,示出了圖6中檢查許可方法6400所執(zhí)行的處理。參照圖6,假設線程6200調(diào)用方法6300-1。在執(zhí)行方法6300-1期間,線程6200調(diào)用方法6300-2,然后是方法6300-3。再假設方法6300-2被特權。
在步驟7100,當資源管理對象接收到一個訪問對象的請求時,調(diào)用檢查許可方法6400確定是否同意執(zhí)行被請求的動作。在圖6,方法6300-3通過調(diào)用訪問控制器對象6500的檢查許可方法6400,并且把執(zhí)行動作所需的許可作為參照傳給它,來請求訪問一對象。
步驟7200-7500定義了一個循環(huán),在該循環(huán)中,檢查與調(diào)用堆棧中諸幀相關的許可。循環(huán)繼續(xù),直至遇到一特權方法,或者檢查完調(diào)用堆棧中的所有幀。為了便于說明,將當前正被檢查特權的幀稱為“選定幀”,并將與該幀相關的方法稱為“選定方法”。
在步驟7200,就與選定幀相關的許可中是否有一個包含所要求的許可作出判斷。與一幀相關的許可是與該幀相關的保護域?qū)ο蟮脑S可。如果步驟7200的判定是與選定幀相關的許可包含了所需要的許可,那么控制行至步驟7300。
在循環(huán)的第一次迭代期間,檢查緊挨在與訪問控制器對象之檢查許可方法相關的幀之前的那個幀。在本例中,與檢查許可方法6400相關的幀是幀6100-4。緊挨在幀6100-4之前的幀是幀6100-3。結(jié)果,在循環(huán)的第一次迭代期間,將檢查幀6100-3。幀6100-3與保護域?qū)ο?400-3相關。如果與保護域?qū)ο?400-3相關的許可包括所需要的許可,那么控制行至步驟7300。
在步驟7300中,就選定方法的調(diào)用是否表示允許調(diào)用做出判斷。該判斷基于與選定方法相對應的幀的特權標志。如果判定選定方法的調(diào)用不代表允許調(diào)用,那么控制行至步驟7400。在本例中,幀6100-3的特權狀態(tài)沒有被設置成指示幀表示允許調(diào)用。因此,控制行至步驟7400。
在步驟7400中,選擇下一個幀。根據(jù)調(diào)用堆棧6100表示的調(diào)用層次,下一幀是當前幀下面的幀。在本例中,當前幀6100-3下面的幀是幀6100-2。對應于幀6100-2的方法是方法6300-2。
在步驟7500中,就是否在步驟7400中選定了一個幀作出判斷。如果選中了一個幀,那么控制返回步驟7200。在本例中,由于選中了幀6100-2,所以控制行至步驟7200。在步驟7200中,所做的判定是,與幀6100-2相關的保護域?qū)ο?保護域?qū)ο?400-2)包括一個包含所需許可的許可,因為在本例中,與保護域?qū)ο?400-2相關的許可明顯包含所需的許可。然后,控制行至步驟7300。
在步驟7300中,所做的判定是,選定方法的調(diào)用表示允許調(diào)用,因為特權標志6150表示與幀6100-2對應的調(diào)用是允許調(diào)用。發(fā)送一消息,表示許可請求是有效的。然后,許可檢查結(jié)束。
當選定方法表示允許調(diào)用時在步驟7300結(jié)束許可檢查,因此對被請求動作的授權基于有特權的保護域?qū)ο笠约芭c允許調(diào)用后所調(diào)用的方法相關的任何保護域?qū)ο蟆?br> 現(xiàn)在,假設在本例中永遠不調(diào)用特權機制。因此,在步驟7300中,所做的判定是,對選定方法的調(diào)用不代表允許調(diào)用,因為特權標志6150表示與幀6100-2對應的調(diào)用不是允許調(diào)用。
在步驟7400中,因為當前幀6100-2下面的幀是幀6100-1,所以被選中的下一幀是幀6100-1,并且與幀6100-1相對應的方法是方法6300-1。在步驟7500中,所做的判定是,在步驟7400選定了下一幀。因此,控制再次返回步驟7200。
在步驟7200中,所做的判定是,與幀6100-1相關的保護域?qū)ο?保護域?qū)ο?400-1)不包括所需的許可,因為在本例中,與保護域?qū)ο?400-1相關的許可中沒有一個包含所需的許可。于是,控制行至步驟7600。
在步驟7600中,發(fā)送一消息,表示不同意執(zhí)行被請求的動作。在符合本發(fā)明的一個實施例中,通過拋出一個異常錯誤來發(fā)送該消息。
當至少有一個與線程相關的保護域?qū)ο蟛话ê柙S可的許可時,不同意執(zhí)行被請求的動作。只有當請求判斷是否同意執(zhí)行一動作時與線程相關的所有保護域?qū)ο蠖及ㄋ璧脑S可的情況下,才同意執(zhí)行該動作。
在符合本發(fā)明的一個實施例中,當一線程(“母線程”)產(chǎn)生另一線程的卵(“子線程”)時,與母線程相關的保護域?qū)ο蟊蛔泳€程“繼承”。例如,當產(chǎn)生子線程時,通過保留母線程的調(diào)用堆棧,可以繼承保護域?qū)ο蟆.攬?zhí)行圖7所示的步驟,以便判斷是否同意執(zhí)行一動作時,將轉(zhuǎn)移的調(diào)用堆棧視作好象它包括母線程的調(diào)用堆棧。
在符合本發(fā)明的另一實施例中,子線程不繼承母線程的保護域?qū)ο蟆T诒纠?,將轉(zhuǎn)移的調(diào)用堆棧視作好象它不包括母線程的調(diào)用堆棧。
根據(jù)與線程相關的保護域?qū)ο髞頉Q定是否同意該線程執(zhí)行一動作的一個好處是,許可可以基于線程正在執(zhí)行的代碼的源,以及在名義上執(zhí)行代碼的委托方。
如前所述,對象是用代碼執(zhí)行單元3200接收到的代碼從類定義建立的。線程正在執(zhí)行的代碼源是方法的代碼源。方法的代碼源是用來定義該方法之對象所屬的類的類定義的源。代碼的執(zhí)行者是在名義上正在執(zhí)行代碼的委托方。這可以包括在客戶機系統(tǒng)上操作的過程或程序的執(zhí)行者。
如前所述,由于保護域?qū)ο笈c方法的代碼源或代碼執(zhí)行者相關,所以授權給線程的許可可以基于被線程調(diào)用的每個方法的代碼源或代碼執(zhí)行者。因此,經(jīng)組織,來自特定源的代碼或者以特定委托方的名義所執(zhí)行的代碼可以與適合安全性目的的許可相關。
上述特權機制的一個優(yōu)點是,在敏感操作的性能中,安全性是關鍵的,它可以被限制成來自信任源的方法以及以信任執(zhí)行者的名義執(zhí)行的方法。另外,可以以基于較小保密代碼的方法的名義完成這些操作。完成敏感操作的方法一般依賴于其自身的安全性機制(例如,口令授權方法)。當一線程調(diào)用特權機制時,將一般會給安全性帶來較大風險的特權域的許可范圍限制為允許調(diào)用。這可以防止了特權方法內(nèi)調(diào)用的方法(諸如根據(jù)不信任代碼或不信任執(zhí)行者的方法)獲得能力執(zhí)行會給安全性帶來較大風險的操作。
盡管以上描述了一種用于跟蹤哪個調(diào)用是允許調(diào)用的方法,但其它各種用于跟蹤允許調(diào)用的方法也是可行的。因此,應該理解,本發(fā)明不限于用于跟蹤允許調(diào)用的任何特定方法。
結(jié)論符合本發(fā)明原理的系統(tǒng)和方法提供了一種加強安全性和機制,在該機制中,線程的訪問許可根據(jù)正在執(zhí)行的代碼的源和執(zhí)行者隨時間而變化。
以上對本發(fā)明實施例的描述提供了說明和描述,但不打算窮舉或限制本發(fā)明于所揭示的明確形式。根據(jù)上述原理可以進行各種變化和改變,或者可以通過發(fā)明實踐來獲得這些變化和改變。本發(fā)明的范圍由權利要求書及其等效物來限制。
盡管將符合本發(fā)明的系統(tǒng)和方法描述成在例示的分布式系統(tǒng)和Java編程環(huán)境下工作,但本領域的熟練技術人員應該理解,本發(fā)明可以在其它系統(tǒng)和其它編程環(huán)境中實行。另外,盡管將本發(fā)明的一些方面(aspect)描述成存儲在存儲器中,但本領域的熟練技術人員應該理解,這些方面還可以存儲在其它類型的計算機可讀的媒體上,或者從其它類型的計算機可讀媒體中讀出。其它類型的計算機可讀媒體例如可以是輔助存儲裝置,如硬盤、軟件或CD-ROM;來自互聯(lián)網(wǎng)的載波;或者其它形式的RAM或ROM。Sun,Sun Microsystems,Sun logo,Java和基于Java的商標是太陽微系統(tǒng)股份有限公司在美國和其它國家的商標或注冊商標。
權利要求
1.一種資源訪問調(diào)節(jié)系統(tǒng),其中所述資源是計算機上執(zhí)行的一個操作所請求的,所述操作在執(zhí)行期間調(diào)用對代碼進行操作的多個功能,其特征在于,所述系統(tǒng)包括策略文件,用于存儲對每個功能的許可,所述許可根據(jù)代碼的源和代碼的執(zhí)行者對資源的訪問類型進行授權;調(diào)用堆棧,它按所述操作調(diào)用的次序,將功能和執(zhí)行者作為幀來存儲;和執(zhí)行裝置,當調(diào)用堆棧上所有功能和執(zhí)行者的許可所授權的訪問類型包括所述操作所請求的訪問時,所述執(zhí)行裝置同意訪問所述資源。
2.如權利要求1所述的系統(tǒng),其特征在于,每個幀都包括代碼標識符,用于為功能中的一個對應功能標識代碼的源;和執(zhí)行者標識符,用于標識在名義上正在執(zhí)行代碼的執(zhí)行者。
3.如權利要求2所述的系統(tǒng),其特征在于,所述策略文件包括多個保護域?qū)ο?,它們與調(diào)用堆棧中的每個幀相對應,并且通過映射代碼標識符和執(zhí)行者標識符,為每個功能設置訪問許可。
4.如權利要求1所述的系統(tǒng),其特征在于,所述執(zhí)行裝置包括一訪問控制器,該訪問控制器用于確定是否授權所述操作,以便對所述資源執(zhí)行被請求的訪問類型,所述訪問控制器包括用于判斷與調(diào)用堆棧上每個幀相關的許可是否包含被請求的方法類型的裝置;用于當許可中有些許可不包含被請求訪問類型時拒絕被請求訪問的裝置;和用于當所有許可都包含被請求的訪問類型時同意訪問所述資源的裝置。
5.如權利要求1所述的系統(tǒng),其特征在于,每個幀都包括一特權標志,該標志表示對應的功能是否是有特權的功能。
6.如權利要求5所述的系統(tǒng),其特征在于,所述執(zhí)行裝置包括一訪問控制器,該訪問控制器用于確定是否授權所述操作,以便對所述資源執(zhí)行被請求的訪問類型,所述訪問控制器包括用于判定諸幀中有一個具有一設定特權標志的裝置;用于判斷與調(diào)用堆棧上具有所述設定特權標志的幀之后的每個幀相關的許可是否包含被請求的方法類型的裝置;用于當許可中有些許可不包含被請求訪問類型時拒絕被請求訪問的裝置;和用于當所有許可都包含被請求的訪問類型時同意訪問所述資源的裝置。
7.一種資源訪問調(diào)節(jié)方法,其中所述資源是計算機上執(zhí)行的一個操作所請求的,所述操作在執(zhí)行期間調(diào)用對代碼進行操作的多個功能,其特征在于,所述方法包括以下步驟存儲對每個功能的許可,所述許可根據(jù)代碼的源和代碼的執(zhí)行者對資源的訪問類型進行授權;按所述操作調(diào)用的次序,將功能和執(zhí)行者作為調(diào)用堆棧中的幀存儲起來;和判斷調(diào)用堆棧上每個功能和執(zhí)行者的許可所授權的訪問類型是否包含所述操作所請求的訪問;以及當調(diào)用堆棧上所有功能和執(zhí)行者的許可所授權的訪問類型都包含所述操作所請求的訪問時,同意訪問所述資源。
8.如權利要求7所述的方法,其特征在于,每個幀都包括一特權標志,該標志表示對應的功能是否是有特權的功能,所述判斷步驟包括以下子步驟發(fā)現(xiàn)諸幀中有一個具有一設定的特權標志;以及確定與調(diào)用堆棧上具有所述設定特權標志的幀之后的每個幀相關的許可是否包含被請求的訪問類型。
9.如權利要求8所述的方法,其特征在于,所述同意步驟包括以下子步驟當許可中有些許可不包含被請求訪問類型時,拒絕被請求訪問;以及當所有許可都包含被請求的訪問類型時,同意訪問所述資源。
10.一種資源訪問調(diào)節(jié)系統(tǒng),其中所述資源是計算機上執(zhí)行的一個操作所請求的,所述操作在執(zhí)行期間調(diào)用對代碼進行操作的多個功能,其特征在于,所述系統(tǒng)包括用于存儲對每個功能的許可的裝置,其中所述許可根據(jù)代碼的源和代碼的執(zhí)行者對資源的訪問類型進行授權;用于按所述操作調(diào)用的次序,將功能和執(zhí)行者作為調(diào)用堆棧中的幀來存儲的裝置;和用于判斷調(diào)用堆棧上所有功能和執(zhí)行者的許可所授權的訪問類型是否包括所述操作所請求的訪問的裝置;以及用于當調(diào)用堆棧上所述功能和執(zhí)行者的許可所授權的訪問類型都包含所述操作所請求的訪問時同意訪問所述資源的裝置。
11.如權利要求10所述的系統(tǒng),其特征在于,每個幀都包括一特權標志,該標志表示對應的功能是否是有特權的功能,所述判斷裝置包括用于發(fā)現(xiàn)諸幀中有一個具有一設定的特權標志的裝置;以及用于確定與調(diào)用堆棧上位于具有所述設定特權標志之幀之后的每個幀相關的許可是否包含被請求的訪問類型的裝置。
12.如權利要求11所述的系統(tǒng),其特征在于,所述同意裝置包括用于當許可中有些許可不包含被請求訪問類型時拒絕被請求訪問的裝置;以及用于當所有許可都包含被請求的訪問類型時同意訪問所述資源的裝置。
13.在一種資源訪問調(diào)節(jié)系統(tǒng)中,所述資源是計算機上執(zhí)行的一個操作所請求的,所述操作在執(zhí)行期間調(diào)用對代碼進行操作的多個功能,所述系統(tǒng)包括策略文件,用于存儲對每個功能的許可,所述許可根據(jù)代碼的源和代碼的執(zhí)行者對資源的訪問類型進行授權;調(diào)用堆棧,它按所述操作調(diào)用的次序,將功能和執(zhí)行者作為幀來存儲;以及執(zhí)行裝置,在所述系統(tǒng)中使用一種對請求訪問所述資源進行調(diào)節(jié)的方法,其特征在于,所述方法包括以下由所述執(zhí)行裝置執(zhí)行的步驟判斷與調(diào)用堆棧上每個幀相關的許可是否包含被請求的訪問類型;以及當許可中有一些許可不包含被請求的訪問類型時,拒絕所述被請求的訪問;以及當所有許可都包含被請求的訪問類型時,準許訪問所述資源。
14.如權利要求13所述的方法,其特征在于,每個幀都包括一特權標志,該標志表示對應的功能是否是有特權的功能,并且所述判斷步驟包括以下子步驟發(fā)現(xiàn)諸幀中有一個具有一設定的特權標志;以及確定與調(diào)用堆棧上位于具有所述設定特權標志的幀之后的每個幀相關的許可是否包含被請求的訪問類型。
15.如權利要求14所述的方法,其特征在于,所述拒絕步驟包括以下子步驟當與具有所述設定特權標志之幀以后的諸幀相關的許可中有些許可不包含被請求訪問類型時,拒絕被請求的訪問;以及所述準許步驟包括以下子步驟當與具有所述設定特權標志之幀以后的諸幀相關的所有許可都包含被請求的訪問類型時,同意訪問所述資源。
16.一種計算機可讀的媒體,該媒體包含用于計算機執(zhí)行一動作的指令,所述動作是由計算機上執(zhí)行的程序所請求的,所述程序在執(zhí)行期間調(diào)用對代碼進行操作的多個功能,所述計算機包括策略文件,用于存儲對每個功能的許可,所述許可根據(jù)代碼的源和代碼的執(zhí)行者對動作類型進行授權;調(diào)用堆棧,它按所述程序調(diào)用的次序,將功能和執(zhí)行者作為幀來存儲;以及執(zhí)行裝置,其特征在于,所述指令使所述執(zhí)行裝置執(zhí)行以下步驟判斷與調(diào)用堆棧上每個幀相關的許可是否包含被請求的動作類型;以及當許可中有一些許可不包含被請求的動作類型時,拒絕所述被請求的動作;以及當所有許可都包含被請求的動作類型時,執(zhí)行被請求的動作。
17.如權利要求16所述的計算機可讀媒體,其特征在于,每個幀都包括一特權標志,該標志表示對應的功能是否是有特權的功能,并且所述判斷步驟包括以下子步驟發(fā)現(xiàn)諸幀中有一個具有一設定的特權標志;以及確定與調(diào)用堆棧上位于具有所述設定特權標志之幀以后的每個幀相關的許可是否包含被請求的訪問類型。
18.如權利要求17所述的計算機可讀媒體,其特征在于,所述拒絕步驟包括以下子步驟當與具有所述設定特權標志之幀以后的諸幀相關的許可中有些許可不包含被請求訪問類型時,拒絕被請求的訪問;以及所述執(zhí)行步驟包括以下子步驟當與具有所述設定特權標志之幀以后的諸幀相關的所有許可都包含被請求的訪問類型時,同意訪問所述資源。
19.一種數(shù)據(jù)處理系統(tǒng),其特征在于,包括存儲器,所述存儲器包括程序,該程序在執(zhí)行期間調(diào)用對代碼進行操作的多個功能,策略文件,用于存儲對每個功能的許可,所述許可根據(jù)代碼的源和代碼的執(zhí)行者對動作類型進行授權;調(diào)用堆棧,它按所述程序調(diào)用的次序,將功能和執(zhí)行者作為幀來存儲;以及運行時環(huán)境,它接收來自所述程序的對一動作類型的請求,判斷與調(diào)用堆棧上每個幀相關的許可是否包含被請求的動作類型,并且當調(diào)用堆棧上所述功能和執(zhí)行者的許可所授權的動作類型都包含被請求的動作類型時,同意所述被請求的動作類型;和處理器,它執(zhí)行所述運行時環(huán)境和所述程序。
全文摘要
一種資源訪問調(diào)節(jié)系統(tǒng),其中資源是由計算機上執(zhí)行的操作所請求的。所述操作在執(zhí)行期間調(diào)用對代碼進行操作的多個方法。所述系統(tǒng)包括策略文件,調(diào)用堆棧和執(zhí)行裝置。策略文件用于存儲對每個資源的許可。所述許可根據(jù)代碼的源和代碼的執(zhí)行者對資源的特定訪問類型進行授權。調(diào)用堆棧按所述操作調(diào)用的次序,存儲方法和執(zhí)行者的表示。當調(diào)用堆棧上所有方法和執(zhí)行者的許可所授權的訪問類型都包括所述操作所請求的訪問時,執(zhí)行裝置同意訪問所述資源。
文檔編號G06F9/46GK1298512SQ99805489
公開日2001年6月6日 申請日期1999年2月18日 優(yōu)先權日1998年2月26日
發(fā)明者R·謝夫勒, 龔利 申請人:太陽微系統(tǒng)公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
峨边| 沅陵县| 临邑县| 滦南县| 建宁县| 墨竹工卡县| 双辽市| 辽阳县| 河北区| 商城县| 阜宁县| 余江县| 建瓯市| 定襄县| 同心县| 湘西| 嵊州市| 龙海市| 枝江市| 五原县| 攀枝花市| 临颍县| 通州区| 怀远县| 邳州市| 广德县| 民勤县| 郎溪县| 嘉兴市| 日照市| 宁武县| 体育| 惠安县| 志丹县| 张家界市| 盐城市| 加查县| 江孜县| 金湖县| 阿坝县| 永平县|