專利名稱:控制存取數據庫的方法與裝置的制作方法
技術領域:
本發明涉及控制存取數據庫的方法與裝置。
在數據庫系統中,通常若干用戶能夠與系統交互作用及利用數據庫。從而這種系統稱作多用戶系統。這種系統中出現的一個問題,即數據庫中包含某種形式的敏感信息或數據,亦即,這些信息或數據只能供一個特定用戶或一個特定的用戶組的成員利用。在這一情況中,便實行一種安全策略來限制數據對用戶組的可利用性。
支持多用戶的數據庫管理系統的實例便是ORACLE(Oracle公司的注冊商標)。ORACLE是關系數據庫管理系統。在關系數據庫中,只存在一種數據結構,這便是表,它是數據的行與列的二維結構。可使用一種稱作結構化查詢語言(SQL)的查詢語言以非過程方式存取數據庫中的數據。
存在著若干種在數據庫管理系統上實現安全策略的方法。例如,在一種方法中向各組用戶提供保存在中央數據庫中的數據中適合于供該組存取的那一部分的本身拷貝。這一方法曾稱作復制法,因為由于至少某些數據存在著一份以上的拷貝而得出重復的數據。很明顯,這一方法對于存儲器的使用效率非常低。再者,如果更新一個值的特定組的用戶以某種方式改變了數據的一份拷貝,則同時必須更新由其它組保持的該數據的若干份其它拷貝。這將是費時的,并且管理系統的方法必須十分精確,以保證如果系統故障時數據能保持在兼容的狀態中。
按照本發明,提供了一種控制用戶對數據庫中的數據存取的方法,包括至少將一部分數據庫配置成使得所配置的數據庫中至少某些數據是與一個安全標簽相關聯的,配置用戶標識符與關聯的用戶標簽的存儲結構,配置用戶標簽與關聯的安全標簽的存儲結構,以及通過從用戶標簽與關聯的安全標簽中確定適合于用戶標識符的用戶標簽的一個或數個安全標簽并允許對來自配置的數據庫中與這些安全標簽相關聯的數據的存取而將一個用戶標識符映射到數據的至少一個子集中。
通過提供用戶標簽與安全標簽的存儲結構,便有可能只通過修正存儲結構中的值而無需重新配置數據庫或改變與用戶名關聯的用戶標簽而改變安全策略。安全標簽表示指明相關數據具有諸如安全密級等特殊屬性的一個數據項。它可以是一個數字或一個字符或其它數據項。存儲結構表示某種數據組合,例如,以樹、記錄、集合、表的形式或其它存儲結構。
按照本發明的第二方面,提供了控制用戶對數據庫的存取的一種方法,包括建立一個數據與關聯的安全標簽的數據庫,建立一個標識符與標識符標簽的第一存儲結構,建立一個標識符標簽與關聯的安全標簽的第二存儲結構及通過從第一存儲結構中確定一個關聯的標識符標簽及從第二存儲結構中確定適合于該確定的標識符標簽的至少一個安全標簽及從數據庫中選擇與該一個或多個安全標簽相關聯的數據,而建立數據庫上適合于標識符中至少一個的景象(view)。
景象表示用戶在需要時可以操作的數據子集。在SQL中可為一名用戶建立允許他在數據中執行操作的一個景象。在定義景象時通過提供一個SQL CHECK(檢驗)選擇項,可使該景象安全,這便是說在不滿足CHECK選擇項時用戶對數據作出的改動不能寫回數據庫中。當用戶對數據庫中的數據沒有寫存取但允許讀取數據及操作它只供他自己使用時,這是特別有用的。
按照本發明操作的系統只需要用戶共享的一份數據拷貝,從而至少避免了與已知的復制法關聯的某些問題,諸如存儲器的低效率或要求額外的數據管理與處理時間。
應指出并非整個數據庫都需要為安全而配置。某些部分可以是公開的,從而對所有用戶開放。
用戶標識符與用戶標簽的存儲結構及用戶標簽與安全標簽的存儲結構可配置成使得至少某些用戶不能得到對存儲結構的所有部分的存取。以這一方法,防止被排除在外的用戶判定他具有何種安全率并且系統可以認為是“透明的”,即用戶不知道安全策略及沒有根據認為對中央數據庫的某些部分的存取受到拒絕。
按照本發明的又一方面,提供了控制用戶對數據庫的存取的裝置,包括配置下述各部分的裝置至少一部分數據庫使得所配置的數據庫中至少某些數據是與安全標簽相關聯的;用戶標識符與關聯的用戶標簽的存儲結構;用戶標簽與關聯的安全標簽的存儲結構;以及通過從用戶標簽與關聯的安全標簽的存儲結構中確定適用于該用戶標識符的用戶標簽的一個或數個安全標簽并允許該用戶存取所配置的數據庫中與這一或這些安全標簽相關聯的數據,而將用戶標識符映射到數據的至少一個子集上的裝置。
本裝置或方法可用于存取雇員記錄或諸如有關電信網的信息等其它信息。網絡經理可利用這些信息來配置電信網。本裝置還可配置成綜合網絡管理功能與數據庫安全功能。
下面參照附圖只以示例方式描述本發明的一個特定實施例,附圖中
圖1以示意性方框圖形式示出按照本發明的一個實施例操作的一個數據庫系統的硬件;圖2示出數據庫系統支持的一組數據庫帳戶;圖3示出數據庫系統的軟件視圖;圖4至6以示意方式示出數據庫系統中使用的表;圖7為數據庫系統的操作的示例圖;圖8為數據庫系統所執行的映射操作的示例圖;圖9為展示映射操作中的步驟的又一示例圖;以及圖10以示意性方框圖形式示出應用在網絡管理應用中的數據庫系統。
參見圖1,數據庫系統1包括若干部件,其中有連接到若干用戶終端3、4與5上的諸如DEC Micro VAX等知名類型的主計算機2,各終端包括一臺諸如IBM PC等知名類型的微機。連接是用知名類型的同軸電纜6實行的,并且系統1的部件之間的通信是用諸如傳輸控制協議/互連網協議(TCP/IP)等知名通信協議達到的。
用戶終端3、4與5是名義上相同的。各具有一個微處理器3a、4a與5a;存儲器3b、4b與5b;輸入/輸出設備3c、4c與5c;緩沖器3d、4d與5d;視覺顯示單元(VDU)3e、4e與5e;以及鍵盤3f、4f與5f。
容易理解,存儲器3b、4b與5b的形式可以是隨機存取存儲器、只讀存儲器或兩者的組合。存儲器可以是如半導體“芯片”或盤(光或磁)等固態形式的或這些形式的組合。
不論形式如何,存儲器包括許多存儲單元。這些單元中包含用于管理與特定的存儲器相關聯的微處理器3a、4a與5a的操作的指令。微處理器3a、4a與5a訪問存儲器來得到指令。在存儲器中作為位于若干存儲單元中的一個指令集合保存一個用于管理終端的操作的程序。指令是以16進制數的形式的。
存儲器以公知的方式用數據總線鏈接到微處理器上。數據總線還將微處理器鏈接到終端的其它部件上。輸入/輸出設備3c、4c與5c作為終端與系統中其它計算機之間的接口工作。
各終端的鍵盤與VDU以公知的方式通過緩沖器與該終端的微處理器交互作用。它們集體提供系統與要求與系統交互作用的用戶之間的接口。
主計算機2具有一個處理器2a、存儲器2b、一個輸入/輸出設備2c、一個外圍緩沖器2d及關聯的VDU2e與鍵盤2f。從而,可以看出主計算機2具有與用戶終端3、4與5相同的形式。主要差別在于存儲器2b的存儲容量遠比用戶終端的存儲器的存儲容量為大。數據庫系統的管理員能利用鍵盤2f及VDU2e存取該系統。
終端3、4及5與主計算機2用延伸在終端的輸入/輸出設備3c、4c及5c與主機的輸入/輸出設備2c之間的同軸電纜6互連。如前面提到的,稱作TCP/IP的協議用于系統1的部件之間的通信。
存儲器2b中包含一個信息數據庫。這些信息可由用戶從他們的終端存取。然而各用戶允許存取信息的范圍可在用戶之間變化。系統管理員能存取整個數據庫。
可認為系統提供了一組數據庫帳戶,如圖2中所示。管理員具有管理員帳戶21而用戶則具有用戶帳戶22、23與24。在本例中用戶名為Brown、Smith與Jones而帳戶則是相應地加以標記的。
除了數據庫以外,存儲器2b還保存一個用于控制處理器2a,具體地說各用戶存取數據庫的方式的程序。從而在軟件控制下處理器2a作為一臺數據庫機器工作。
如圖3中所示,Smith、Brown與Jones能輸入請求到數據庫機器31中而機器則處理根據需要存取數據庫32的請求。然后數據庫機器31輸出應答給查詢中的用戶。這些請求將由同軸電纜6上的傳輸攜帶。
數據庫32細分成三個部分,各部分為一張SQL表。第一細分為稱作“EMPLOY”(雇員)的表33,第二細分為稱作“SECURITY”(安全)的表34,第三細分為稱作“USER”(用戶)的表35。數據庫系統1利用一種稱作ORACLE SQL(Oracle公司的注冊商標)的編程語言來建立與利用這些表。稍后將描述初始建立這些表的方法。
“EMPLOY”表33中包含關于公司雇員的信息,它包括圖4中所示的若干個數據字段。
數據字段中包含稱作“EMP NO(雇員號)”的一個數據字段33a,它包含一個特定公司的雇員的雇員參照號。
有一個稱作“NAME(姓名)”的數據字段33b,它包含作為30個字符(CHAR)或以下的一個串保持的公司雇員姓名。
下一個數據字段為稱作“POSI TION(職位)”的數據字段33c。“POSI TION”數據字段33c中包含有關一個特定雇員在公司中的職位的信息,例如雇員可能是經理、會計或秘書。這一信息也作為10個或以下字符的一個串存儲。
下一個數據字段為稱作“SAL(工資)”的數據字段33d。它包含用7位數字表示的各雇員的薪金信息。
數據字段33e稱作“DEPT(部門)”,它包含雇員在其中工作的部門的名稱。這一信息是作為兩個字符的一個串保存的。
數據字段33f稱作“ROW-TAG(行標簽)”。這一數據字段包含指出它屬于的信息行的安全狀態的一個單個字符的串。這一字段對于允許對“EMPLOY”表33的特定行進行存取的方式具有特別重要性。
“SECURITY(安全)”表34包括兩個數據字段,第一數據字段34a稱作“ROW-TAG”,第二數據字段34b稱作“USER-TAG”,如圖5中所示。
“ROW-TAG”數據字段34a中包含與“EMPLOY”表示“ROW-TAG”數據字段33f中相同的字符。它允許稍后要說明的一種映射操作,在該操作中通過選擇具有與“SECURITY”表34中的“ROW-TAG”相同的“ROW-TAG”的那些行而選擇”EMPLOY“表中的行。
“USER-TAG(用戶標簽)”數據字段34b中保存一個字符的數據。這一字段的功能為置能上述映射操作,稍后將更全面說明。
如此命名“SECURITY”表34是因為系統安全策略體現在該表中。此表的“ROW-TAG”及“USER-TAG”稱作安全標簽,因為安全策略是由這些標簽控制的。安全策略可通過修改該表而方便地修改。稍后將更全面地說明系統的這一方面。
“USER(用戶)”表35示出在圖6中并包括一個“USER-TAG”字段35a與一個“USER-NAME(用戶姓名)”字段35b。
“USER-TAG”字段35a保存一個字符的數據,它將包含與保存在“SECURITY”表34中的“USER-TAG”字段34b中相同的字符。這將允許執行上述映射操作,如稍后要描述的。
“USER-NAME”字段35b中保存字符串形式的系統的用戶的姓名。
圖7中示出系統操作的流程圖。操作中的第一步為初始化,如框70所表示的。在這一步驟中接通終端3、4與5,以及主計算機2,并準備好使用。
用框71表示的第二步驟為在存儲器2b中建立這些表。這是以下述方式使用SQL命令CREATE TABLE(建立表)由數據庫機器31完成的。
對于“EMPLOY”表33,數字庫機器31實現下述命令語句<pre listing-type="program-listing"><![CDATA[CREATE TABLE EMPLOY (EMP NUMBER(4)NAME CHAR(30),POSITION CHAR(10),SAL NUMBER(7),DEPT CHAR(10),ROW_TAG CHAR(1));]]></pre>“SECURITY”表34是以下述方式使用SQL CREATE TABLE(SQL建立表)命令配置的。
<pre listing-type="program-listing"><![CDATA[CREATE TABLE SECURITY(ROW_TAG CHAR(1),USER_TAG CHAR(1));]]></pre>“USER”表35是以下述方式用SQL CREATE命令配置的。
<pre listing-type="program-listing"><![CDATA[CREATE TABLE USER(USER_TAG CHAR(1),USER_NAME CHAR(10));]]></pre>在下步驟72中,在表中填充數據。這是由網絡管理員使用數據庫機器31及下述方式的SQL INSERT(SQL插入)命令完成的。
例如為了將關于一各稱作Stuart Fitchett的雇員的一行數據插入“EMP LOY”表,管理員發布下述命令。
<pre listing-type="program-listing"><![CDATA[INSERT INTO EMPLOYVALVES(10,‘Stuart Fitchett’,‘CLERK’,1000,‘CS’,‘U’);]]></pre>借此,記錄了雇員號10稱作Fitchett,它是在客戶服務部(縮略為CS)中月薪為1000鎊的一名會計,以及讀取這一信息所需的安全標簽為‘U’。
以類似的方式將數據輸入到“SECURITY”表34中。
例如可用下述方式輸入前七行數據。
<pre listing-type="program-listing"><![CDATA[INSERT INTO SECURITY VALUES (‘U’,‘A’);INSERT INTO SECURITYVALUES (‘V,’‘A’);INSERT INTO SECURITYVALUES (‘U,’‘B’); INSERT INTO SECURITYVALUES (‘W’ ‘B’);INSERT INTO SECURITYVALUES (‘W’‘C’);]]></pre>以類似方式完成USER(用戶)表。
<pre listing-type="program-listing"><![CDATA[INSERT INTO USERVALUES (‘A’,‘SMITH’);INSERT INTO USERVALUES (‘B’,‘JONES’);INSERT INTO USERVALUES (‘C’,‘BROWN’);]]></pre>然后數據庫機器31等待用戶之一對來目數據庫32的信息的請求,如圖7的框73所表示的。
接收到一個請求時便處理它,如框74所表示的。完成處理時系統返回到等待請求步驟73。
完成后的表示意性地示出在圖8中。
下面參照圖9更詳細地描述處理請求步驟74。利用實現管理系統1的安全策略的上述映射操作的便是這一處理步驟。
第一步驟為數據庫機器31識別作出對存儲在數據庫32中的信息進行存取的請求的用戶,如圖9的框90所表示的。
下一步驟為數據庫機器31利用“USER-TABLE”35來得出適用于被識別出的用戶的“USER-TAG”,如框91所表示的。
再下一步驟,如框92所表示的,為數據庫機器31利用“SECURITY”表34來得出適用于在步驟91中識別出的“USER-TAG”的“ROW-TAG”。
最后的步驟,如框93所表示的,當與行相關聯的一個“ROW-TAG”與前一步驟92中識別出的“ROW-TAG”匹配時,數據庫機器31返回來自“EMPLOY”表33中的一行或數行數據。
下面用一個實例來展示數據庫機器31處理一個請求的方式。
USER-NAME為SMITH的用戶已賦予了一個USER-TAGA而這可通過“SECURITY”表34映射到ROW-TAG U與V上。這使得SMITH能夠得到對EMPLOY表33中已賦予了ROW-TAGU或V的行的存取。從而將SMITH映射到表EMPLOY的行ROW1、ROW2與ROW3上而能觀察這些行的數據。
更詳細地,假定SMITH想要存取他能夠從“EMPLOY”表33存取的全部信息。SMITH發出一條SQL SELECT(SQL選擇)命令SELECT*FROM EMPLOY到數據庫機器31來做到這一點。
數據庫機器31賦予SMITH的這一命令一個變元來識別用戶然后執行下述映射操作,其中USER-NAME為“SMITH”。映射操作是提供在管理數據庫機器31的程序中的。
<pre listing-type="program-listing"><![CDATA[CREATE VIEW SECURE_EMPLOY ASSELECT EMP, NAME, POSI TION, SAL, DEPT,FROM FMPLOYWHERE EMPLOY.ROW_TAG IN( SELECT SECURITY.ROW_TAG FROM SECURI TYWHERE SECURITY.USER_TAG IN(SELECT USER.USER_TAGFROM USERWHERE USER.USER_NAME=username))]]></pre>這返回給用戶SMITH表“EMPLOY”中具有ROW-TAG‘U’或‘V’的行,即表33的行ROW1、ROW2及ROW3。應指出,由于SELECT命令并不包含“EMP LOY”表33的“ROW-TAG”列,這一信息并不返回給用戶而用戶不能確定管理數據的安全策略。從而,安全策略是對用戶透明的。
系統以類似的方式滿足BROWN與JONES的存取,而數據庫機器所提供的用戶名變元則為適當的BROWN或JONES。
如果要實現安全策略中的改變,例如要將以前能存取EMPLOY表33中具有標簽‘U’或‘V’的具有USER-TAG‘A’的用戶限制為只能存取標簽為‘U’的行,則網絡管理員只須通過從賦予用戶標簽A的安全標簽中刪除來修正SECURITY表34即可。這可以這樣應用SQL DELETEFROM表(SQL從表中刪除)命令達到<pre listing-type="program-listing"><![CDATA[DELETE FROM SECURITYWHERE SECURITY.USER-TAG=‘A’AND SECURITY.ROW-TAG=‘V’;]]></pre>這樣便刪除了圖8中所示的“SECURITY”表34的第二行,消除了從用戶SMITH到“EMPLOY”表33中具有標簽‘V’的第二行的映射路徑。
為了擴大具有USER-TAG‘B’的用戶組對EMPLOY表33的可存取的量,例如,使其能存取具有ROW-TAG‘V’或ROW-TAG‘X’的行,這樣應用SQL命令INSERT INTO TABLE(插入到表中)<pre listing-type="program-listing"><![CDATA[INSERT INTO SECURITYVALUES(‘V’,‘B’);INSERT INTO SECURITYVALUES(‘X’,‘B’);]]></pre>這將進一步提供從用戶表到EMPLOY表的另外兩條映射路徑,如圖8中用虛線所示。
在某些數據庫安全系統中,可能希望防止某些用戶組更新數據庫中的數據。達到這一目的的一種方法為建立一個EMPLOY表33上的景象,它從提供一個檢驗選擇項以防止用戶在數據庫中他以后不能從其中刪除信息的一部分中插入一個項的意義上是安全的。只有滿足SQL“WHERE”語名時才允許插入數據或更新數據。例如<pre listing-type="program-listing"><![CDATA[CREATE VIEW SECURE EMPLOY_2 ASSELECT*FROM EMPLOYWHERE EMPLOY.ROW_TAG IN(SELECT SECURITY.ROW_TAGFROM SECURITYWHERE SECURITY.USER_TAG IN(SELECT USER.USER_TAGFROM USERWHERE USER.USER_NAME=USERNAME))WITH CHECK OPTION]]></pre>在第一個描述的實施例中,數據庫中包含有關雇員的信息,即該數據庫是一個人事數據庫。其它類型的信息也能存儲。
圖10示出用在網絡經理的按照本發明的系統1。在該系統中,數據庫中包含一個電信網100的諸如配置管理信息等信息,電信網100包括若干網絡部件101至103及它們的部件經理104至106。以前面描述的相同方法向諸如網絡經理等系統1的關心網絡100的操作與控制的用戶提供對數據庫的不同部分的存取。
權利要求
1.一種用于控制用戶對數據庫存取的方法,包括將至少一部分數據庫配置成使所配置的數據的至少某些數據與一個安全標簽相關聯,配置用戶標識符與關聯的用戶標簽的一個存儲結構,配置用戶標簽與關聯的安全標簽的一個存儲結構,及通過從用戶標簽與關聯的安全標簽的存儲結構中確定適用于用戶標識符的用戶標簽的一個或數個安全標簽并允許用戶對來自配置的數據庫中與這些安全標簽相關聯的數據進行存取,而將一個用戶標識符映射到數據的至少一個子集上。
2.權利要求1中所要求的方法,其中輸入到數據庫中的數據是與適用于輸入數據的用戶的用戶標識符的用戶標簽的一個安全標簽相關聯的。
3.權利要求1或2中所要求的方法,其中的數據庫和/或存儲結構為表。
4.一種用于控制用戶對數據庫存取的方法,包括建立數據與關聯的安全標簽的一個數據庫,建立標識符與關聯的標識符標簽的第一存儲結構,建立標識符標簽與關聯的安全標簽的第二存儲結構,以及通過從第一存儲結構中確定一個關聯的標識符標簽并從第二存儲結構中確定至少一個適用于該確定的標識符標簽的安全標簽并從數據庫中選擇與該一個或數個安全標簽相關聯的數據,而在數據庫上建立一個適用于至少一個標識符的景象。
5.前面任何權利要求中所要求的方法,其中的數據庫為電信網數據庫。
6.用于控制用戶對數據庫存取的裝置,包括配置下述裝置至少一部分數據庫使得所配置的數據庫的至少某些數據與一個安全標簽相關聯;用戶標識符與關聯的用戶標簽的一個存儲結構;用戶標簽與關聯的安全標簽的一個存儲結構;及通過從用戶標鑒與關聯的安全標鑒的存儲結構中確定一個或數個適用于用戶標識符的用戶標簽的安全標簽并允許用戶存取所配置的數據庫中與這些安全標簽關聯的數據而將一個用戶標識符映射到至少數據的一個子集的裝置。
7.權利要求6中所要求的裝置,包括將輸入數據庫中的數據與適用于輸入數據的用戶的用戶標識符的用戶標簽的一個安全標簽相關聯的裝置。
8.管理包含權利要求6或7中所要求的裝置的電信網的裝置。
9.一個數據集合,用權利要求1至5中任何一項中所要求的方法存取。
全文摘要
本發明提供了控制對數據庫(32)中的數據(行1至行5)的存取的方法與裝置,包括配置至少一部分數據庫(32)使得所配置的數據庫(33)的至少某些數據(行1至行5)與安全標簽(ROM-TAG)相關聯,配置用戶標識符(USER-NAME)與關聯的用戶標簽(USER-TAG)的一個存儲結構(35),配置用戶標簽(USER-TAG)與關聯的安全標簽(ROW-TAG)的一個存儲結構(34),及通過從用戶標簽(USER-TAG)與關聯的安全標簽(ROW-TAG)的存儲結構(34)中確定適用于用戶標識符(USER-NAME)的用戶標簽(USER-TAG)的一個或數個安全標簽(ROW-TAG)并允許對所配置的數據庫(33)中與這些安全標簽(ROW-TAG)相關聯的數據(行1至行5)進行存取而將一個用戶標識符(USER-NAME)映射到數據(行1至行5)的至少一個子集上。通過提供用戶標簽(USER-TAG)與關聯的安全標簽(ROW-TAG)的一個存儲結構(34),便有可能只修改存儲結構(34)中的數據而不需要修改所配置的數據庫(33)中的數據(行1至行5)便能改變安全策略。
文檔編號G06F21/62GK1141091SQ95191658
公開日1997年1月22日 申請日期1995年2月14日 優先權日1994年2月16日
發明者基思·哈特 申請人:英國電訊有限公司