




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第8章應用設計和開發(fā)吉林大學計算機科學與技術學院數(shù)據(jù)庫系統(tǒng)概論8.6觸發(fā)器觸發(fā)器(Trigger)是用戶定義在關系表上的一類由事件驅動的特殊過程定義之后,任何用戶對表的增加、刪除、修改操作均由由服務器自動激活相應的觸發(fā)器。觸發(fā)器類似于約束,但是比約束更加靈活,可以實施比FOREIGNKEY約束、CHECK約束更為復雜的檢查和操作,具有更精細和更強大的數(shù)據(jù)控制能力8.6觸發(fā)器觸發(fā)囂(trigger)是一條語句,當對數(shù)據(jù)庫修改時,它自動被系統(tǒng)執(zhí)行。要設置觸發(fā)器機制,我們必須滿足兩個要求:
1.指明什么條件下觸發(fā)器被執(zhí)行。它被分解為一個引起觸發(fā)器被檢測的事件和一個觸發(fā)器執(zhí)行必須滿足的條件。
2.指明觸發(fā)器執(zhí)行時的動作。觸發(fā)器并不是SQL92或SQL99核心SQL規(guī)范的內(nèi)容,但是很多RDBMS很早就支持觸發(fā)器,因此不同的RDBMS實現(xiàn)的觸發(fā)器語法也會有所不同。8.6觸發(fā)器數(shù)據(jù)庫就像存儲普通數(shù)據(jù)一樣存儲觸發(fā)器,所以它們被永久保存,也可以被所有的數(shù)據(jù)庫操作訪問。我們一旦把一個觸發(fā)器輸入數(shù)據(jù)庫,只要指定的事件發(fā)生,相應的條件被滿足,數(shù)據(jù)庫系統(tǒng)就有責任去執(zhí)行它。8.6.1對觸發(fā)器的需求
對于警示或滿足特定條件時自動執(zhí)行某項任務來說,觸發(fā)器是非常有用的機制例如,假設銀行處理透支時,不是將賬戶余額設成負值,而是將賬戶余額設成零,并且建一筆貸款,其金額為透支額。這筆貸款的貸款號等于該透支賬戶的賬號
8.6.1對觸發(fā)器的需求假設Jones從賬戶支出一些錢,導致賬戶余額變成負值。令t代表balance為負值的賬戶元組。在loan關系中插入一條新元組s:
s[loan_number]=t[account_number]
s[branch_name]=t[brance_name]
s[amount]=-t[balance]
在borrower關系中插入一條新元組u:
u[customer_name]=“Jones”
u[loan_number]=t[account_number]
將t[balance]設為零。8.6.1對觸發(fā)器的需求另一個應用觸發(fā)器的例子假設一個倉庫希望每種商品的庫存保持一個最小量;當某種商品的庫存少于最小值的時候,自動發(fā)出一個訂單。觸發(fā)器就是這樣執(zhí)行業(yè)務規(guī)則的:在更新某種商品的庫存的時候,觸發(fā)器會比較這種商品的當前庫存和它的最小庫存,如果庫存數(shù)量等于或小于最小值,一個新的訂單就會被添加到orders關系中。
8.6.1對觸發(fā)器的需求
注意,觸發(fā)器系統(tǒng)通常不能執(zhí)行數(shù)據(jù)庫以外的更新,因此,在上面的庫存補充的例子中,我們不能用一個觸發(fā)器直接對外部世界下訂單,而是在orders關系中添加一個訂單記錄。我們必須另外創(chuàng)建一個持久運行的系統(tǒng)進程來周期性掃描orders關系并訂購產(chǎn)品。這個系統(tǒng)進程也要注意orders關系中哪些元組已經(jīng)被處理了以及什么時候下的訂單。這個進程同時跟蹤訂單的交貨情況,當意外發(fā)生時,負責警示管理人員。8.6.2SQL中的觸發(fā)器
雖然在SQL:1999前觸發(fā)器不是SQL標準的一部分,但是以SQL為基礎的數(shù)據(jù)庫系統(tǒng)廣泛應用了觸發(fā)器。不幸的是,每一個數(shù)據(jù)庫系統(tǒng)使用它們各自的觸發(fā)器語法,導致相互之間不兼容。我們在圖8-8中概述了SQL:1999的觸發(fā)器語法(類似于IBMDB2和Oracle數(shù)據(jù)庫系統(tǒng)的語法)。
8.6.2SQL中的觸發(fā)器createtrigger
overdraft-triggerafterupdateon
account
referencingnewrowas
nrow
foreachrow
when
nrow.balance
<0
beginatomic
insertinto
borrower
(selectcustomer-name,account-number
fromdepositor
wherenrow.account-number=depositor.account-number);
insertinto
loan
values
(nrow.account-number,nrow.branch-name,-nrow.balance);
update
accountset
balance=0
where
account.account-number=nrow.account-number
end
這個觸發(fā)器定義指定觸發(fā)器在任何一次對關系account的更新執(zhí)行之后都會啟動。一個SQL更新語句可以更新關系中的多個元組,在觸發(fā)器代碼中的foreachrow語句可以顯式地在每一個更新行上迭代。referrencingnewrowas語句建立了一個變量nrow(稱為過渡變量(transitionvariable))。用來存儲更新行的更新后的值。
when語句指定一個條件nrow.balance<0.僅對于滿足條件的元組系統(tǒng)才會執(zhí)行觸發(fā)器中的其余部分。beginatomic...end語句用來將多行SQL語句集成為一個復合語句。兩個在begin…end結構之間的insert語句執(zhí)行了在borrower和loan關系中建立新元組來表示新貸款的任務。update語句用來把賬戶余額從先前的負值清回.
觸發(fā)器定義觸發(fā)器激活觸發(fā)器刪除觸發(fā)器
定義觸發(fā)器CREATETRIGGER語法格式
CREATETRIGGER<觸發(fā)器名>
{BEFORE|AFTER}<觸發(fā)事件>ON
<表名>FOREACH{ROW|STATEMENT}
[WHEN<觸發(fā)條件>]
<觸發(fā)動作體>定義觸發(fā)器的語法說明:1.創(chuàng)建者:表的擁有者即創(chuàng)建表的用戶2.觸發(fā)器名:可以包含模式名,也可以不包含3.表名:觸發(fā)器的目標表4.觸發(fā)事件:可以是INSERT、DELETE或UPDATE也可以是這幾個事件的組合,如INSERTORDELETE等UPDATE后面還可以有OF<觸發(fā)列>,進一步指明修改哪些列時觸發(fā)器激活5.觸發(fā)器類型行級觸發(fā)器(FOREACHROW)語句級觸發(fā)器(FOREACHSTATEMENT)例如,假設在TEACHER表上創(chuàng)建了一個AFTERUPDATE觸發(fā)器。如果表TEACHER有1000行,執(zhí)行如下語句:
UPDATETEACHERSET
Deptno=5;如果該觸發(fā)器為語句級觸發(fā)器,那么執(zhí)行完該語句后,觸發(fā)動作只發(fā)生一次如果是行級觸發(fā)器,觸發(fā)動作將執(zhí)行1000次
6.觸發(fā)條件觸發(fā)器激活時,只有觸發(fā)條件為真時觸發(fā)動作體才執(zhí)行,否則觸發(fā)動作體不執(zhí)行。WHEN觸發(fā)條件可以省略,如果省略則觸發(fā)動作體在觸發(fā)器激活后立即執(zhí)行。7.觸發(fā)動作體觸發(fā)動作體可以是一個匿名SQL過程塊也可以是對已創(chuàng)建存儲過程的調用如果是行級觸發(fā)器,在after和before兩種情況下,用戶都可以在過程體中使用NEW和OLD引用UPDATE/INSERT事件之后的新值和UPDATE和DELETE事件之前的舊值。如果是語句級觸發(fā)器,則不能在觸發(fā)動作體中使用NEW和OLD進行引用[例1]定義一個BEFORE行級觸發(fā)器,為教師表Teacher定義完整性規(guī)則“教授的工資不得低于4000元,如果低于4000元,自動改為4000元”。
CREATETRIGGERInsert_Or_Update_Sal
BEFORE
INSERTORUPDATEONTeacher/*觸發(fā)事件是插入或更新操作*/FOREACHROW/*行級觸發(fā)器*/ASBEGIN/*定義觸發(fā)動作體,是PL/SQL過程塊*/IF(new.Job='教授')AND(new.Sal<4000)THEN
new.Sal:=4000;ENDIF;END;
[例2]定義AFTER行級觸發(fā)器,當教師表Teacher的工資發(fā)生變化后就自動在工資變化表Sal_log中增加一條相應記錄首先建立工資變化表Sal_logCREATETABLESal_log(EnoNUMERIC(4)referencesteacher(eno),
SalNUMERIC(7,2),
Usernamechar(10),
DateTIME);[例2](續(xù)1)CREATETRIGGERInsert_Sal
AFTERINSERTONTeacher /*觸發(fā)事件是INSERTFOREACHROWASBEGININSERTINTOSal_logVALUES(
new.Eno,new.Sal,CURRENT_USER, CURRENT_TIMESTAMP);END;[例2](續(xù)2)CREATETRIGGERUpdate_Sal
AFTERUPDATEONTeacher/*觸發(fā)事件是UPDATE*/FOREACHROWASBEGINIF(new.Sal<>old.Sal)THENINSERTINTOSal_log
VALUES(new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP);ENDIF;END;激活觸發(fā)器觸發(fā)器的執(zhí)行,是由觸發(fā)事件激活的,并由數(shù)據(jù)庫服務器自動執(zhí)行一個數(shù)據(jù)表上可能定義了多個觸發(fā)器同一個表上的多個觸發(fā)器激活時遵循如下的執(zhí)行順序:(1)執(zhí)行該表上的BEFORE觸發(fā)器;(2)激活觸發(fā)器的SQL語句;(3)執(zhí)行該表上的AFTER觸發(fā)器。激活觸發(fā)器
[例3]執(zhí)行修改某個教師工資的SQL語句,激活上述定義的觸發(fā)器。
UPDATETeacherSETSal=800WHEREEname='陳平';
執(zhí)行順序是:執(zhí)行觸發(fā)器Insert_Or_Update_Sal執(zhí)行SQL語句“UPDATETeacherSETSal=800WHEREEname='陳平';”執(zhí)行觸發(fā)器Insert_Sal;執(zhí)行觸發(fā)器Update_Sal
刪除觸發(fā)器刪除觸發(fā)器的SQL語法:
DROPTRIGGER<觸發(fā)器名>ON<表名>;觸發(fā)器必須是一個已經(jīng)創(chuàng)建的觸發(fā)器,并且只能由具有相應權限的用戶刪除。[例4]刪除教師表Teacher上的觸發(fā)器Insert_SalDROPTRIGGERInsert_SalONTeacher;8.6.3何時不用觸發(fā)器觸發(fā)器有很多好的用途,然而有一些場合最好用別的技術來處理。例如,在過去,系統(tǒng)設計者用觸發(fā)器來維護概要數(shù)據(jù)。今天的很多數(shù)據(jù)庫系統(tǒng)支持物化視圖,這使維護概要數(shù)據(jù)的方法更簡單。
設計者也用觸發(fā)器來復制數(shù)據(jù)庫;他們在每一個關系的插入/刪除更新的操作上使用觸發(fā)器,跟蹤其改變并將這些變更記錄在稱為change或delta的關系上。一個單獨的進程將這些改變拷貝到數(shù)據(jù)庫的副本,系統(tǒng)對副本執(zhí)行修改。然而,現(xiàn)代的數(shù)據(jù)庫系統(tǒng)提供內(nèi)置的數(shù)據(jù)庫復制工具,使得復制在大多數(shù)情況下不必使用觸發(fā)器。實際上,觸發(fā)器的很多應用,包括我們透支觸發(fā)器的例子,可以用適當?shù)拇鎯^程取代。例如,假定對account的balance屬性的更新僅通過一個特殊的存儲過程完成。該過程會依次檢查負的余額,執(zhí)行透支觸發(fā)器的動作。編程人員應當小心,不要直接更新balance的值,而是僅僅通過該存儲過程來更新;這可以通過不給應用程序/用戶賦予balance屬性的更新權限,而僅給它們在該存儲過程上的執(zhí)行權限來保證。類似地,封裝也可以代替重新訂購觸發(fā)器。8.6.3何時不用觸發(fā)器一個觸發(fā)器的動作可以引發(fā)另一個觸發(fā)器。在最壞的情況下,這甚至會導致一個無限的觸發(fā)鏈。例如,假設在一個關系上的插入觸發(fā)器里有一個動作引起在同一關系上的另一個(新的)插入,該插入動作也會引起另一個新插入,如此無窮循環(huán)下去。數(shù)據(jù)庫系統(tǒng)通常限制這種觸發(fā)器鏈的長度(例如16或32),把更長的觸發(fā)器鏈看作是一個錯誤8.7SQL中的授權在4.3節(jié)中我們學習了包括delete、insert、select和update權限在內(nèi)的SQL基本權限集。除了這些用于訪問數(shù)據(jù)的權限形式之外,我們也可以(從概念上)賦予用戶另一種修改數(shù)據(jù)庫模式的權限:
創(chuàng)建新的關系的授權。從一個關系中添加或刪除屬性的授權。
刪除一個關系的授權。數(shù)據(jù)庫安全性問題的提出數(shù)據(jù)庫的一大特點是數(shù)據(jù)可以共享數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)共享不能是無條件的共享例:軍事秘密、國家機密、市場營銷策略、銷售計劃、客戶檔案、銀行儲蓄數(shù)據(jù)數(shù)據(jù)共享必然帶來數(shù)據(jù)庫的安全性問題數(shù)據(jù)庫的安全性是指保護數(shù)據(jù)庫以防止不合法的使用所造成的數(shù)據(jù)泄漏、更改或破壞數(shù)據(jù)庫安全性數(shù)據(jù)庫中數(shù)據(jù)的共享是在DBMS統(tǒng)一的嚴格的控制之下的共享,即只允許有合法使用權限的用戶訪問允許他存取的數(shù)據(jù)數(shù)據(jù)庫的安全性和計算機系統(tǒng)的安全性,包括計算機硬件、操作系統(tǒng)、網(wǎng)絡系統(tǒng)等的安全性,是緊密聯(lián)系相互支持的。計算機系統(tǒng)中的安全模型
應用DBMSOS
DB計算機系統(tǒng)的安全模型用戶標識和鑒定
數(shù)據(jù)庫安全保護操作系統(tǒng)安全保護
密碼存儲
在一般計算機系統(tǒng)中,安全措施是一級一級層層設置的
用戶標識與鑒別用戶標識與鑒別(Identification&Authentication)系統(tǒng)提供的最外層安全保護措施基本方法系統(tǒng)提供一定的方式讓用戶標識自己的名字或身份系統(tǒng)內(nèi)部記錄著所有合法用戶的標識;每次用戶要求進入系統(tǒng)時,由系統(tǒng)核對用戶提供的身份標識通過鑒定后才提供機器使用權。用戶標識與鑒別常用的方法有:用戶標識(UserID):用一個用戶名或者用戶標識號來標明用戶身份??诹睿≒assword):為了進一步核實用戶,系統(tǒng)常常要求用戶輸入口令。存取控制數(shù)據(jù)庫安全最重要的一點就是確保只授權給有資格的用戶訪問數(shù)據(jù)庫的權限,同時令所有未被授權的人員無法接近數(shù)據(jù),這主要通過數(shù)據(jù)庫系統(tǒng)的存取控制機制實現(xiàn)。存取控制
存取控制機制包括兩部分
定義用戶權限,并將用戶權限登記到數(shù)據(jù)字典中合法權限檢查用戶權限定義和合法權檢查機制一起組成了DBMS的安全子系統(tǒng)定義用戶權限,并將用戶權限登記到數(shù)據(jù)字典中用戶對某一數(shù)據(jù)對象的操作權力稱為權限。DBMS系統(tǒng)提供適當?shù)恼Z言來定義用戶權限,這些定義經(jīng)過編譯后存放在數(shù)據(jù)字典中,被稱做安全規(guī)則或授權規(guī)則。合法權限檢查每當用戶發(fā)出存取數(shù)據(jù)庫的操作請求后,DBMS查找數(shù)據(jù)字典,根據(jù)安全規(guī)則進行合法權限檢查,若用戶的操作請求超出了定義的權限,系統(tǒng)將拒絕執(zhí)行此操作常用存取控制方法自主存取控制(DiscretionaryAccessControl,簡稱DAC)同一用戶對于不同的數(shù)據(jù)對象有不同的存取權限不同的用戶對同一對象也有不同的權限用戶還可將其擁有的存取權限轉授給其他用戶強制存取控制(MandatoryAccessControl,簡稱
MAC)每一個數(shù)據(jù)對象被標以一定的密級每一個用戶也被授予某一個級別的許可證對于任意一個對象,只有具有合法許可證的用戶才可以存取自主存取控制方法
大型數(shù)據(jù)庫管理系統(tǒng)幾乎都支持自主存取控制,目前的SQL標準也對自主存取控制提供支持,這主要通過SQL的Grant語句和Revoke語句來實現(xiàn)。自主存取控制方法用戶權限由兩個要素組成數(shù)據(jù)對象操作類型定義一個用戶的存取權限就是要定義這個用戶可以在哪些數(shù)據(jù)對象上進行哪些類型的操作。在數(shù)據(jù)庫系統(tǒng)中,定義存取權限稱為授權。自主存取控制方法關系系統(tǒng)中的存取權限對象類型對象操作類型數(shù)據(jù)庫模式Createschema基本表Createtable,Altertalbe模式視圖Createview索引Createindex數(shù)據(jù)基本表和視圖Select,Insert,Update,Delete,References,Allprivileges數(shù)據(jù)屬性列Select,Insert,Update,References,Allprivileges授權與回收
某個用戶對某類數(shù)據(jù)庫對象具有何種操作權力是政策問題而不是技術問題。數(shù)據(jù)庫管理系統(tǒng)的功能是保證這些決定的執(zhí)行。用戶或DBA把授權決定告知系統(tǒng),由SQL的GRANT和REVOKE語句來完成DBMS把授權的結果存入數(shù)據(jù)字典,當用戶提出操作請求時,DBMS根據(jù)授權定義進行檢查,以決定是否執(zhí)行操作請求
授權與回收一、GRANT語句GRANT語句的一般格式:
GRANT<權限>[,<權限>]...
ON
<對象類型><對象名>[,<對象類型><對象名>]…
TO<用戶>[,<用戶>]...[WITHGRANTOPTION];誰定義?DBO和表的建立者(即表的屬主)GRANT功能:將對指定操作對象的指定操作權限授予指定的用戶。WITHGRANTOPTION子句指定了WITHGRANTOPTION子句:
獲得某種權限的用戶還可以把這種權限再授予別的用戶。沒有指定WITHGRANTOPTION子句:
獲得某種權限的用戶只能使用該權限,不能傳播該權限例題例1把對s表和c表的全部權限授予用戶U1和U2GRANTALLPRIVILEGES
ONTABLEs,cTOU1,U2;例題例2把查詢s表和修改學生學號的權限授給用戶U3,并允許他再將此權限授予其他用戶
GRANTUPDATE(Sno),SELECT ONTABLEs TOU3
WITHGRANTOPTION;傳播權限執(zhí)行例2后,U3不僅擁有了對表S的select權限和對學號列的修改權限,還可以傳播此權限:
GRANTUPDATE(Sno),SELECTONsTOU4
WITHGRANTOPTION;
同樣,U4還可以將此權限授予U5:
GRANTUPDATE(Sno),SELECTONsTOU5
但U5不能再傳播此權限。
授權與回收二、REVOKEREVOKE語句的一般格式為:
REVOKE<權限>[,<權限>]...[ON<對象類型><對象名>]FROM<用戶>[,<用戶>]...;功能:從指定用戶那里收回對指定對象的指定權限例題例4把用戶U3修改學生學號的權限收回
REVOKEUPDATE(Sno) ONTABLEs FROMU3;小結:SQL靈活的授權機制DBA擁有對數(shù)據(jù)庫中所有對象的所有權限,并可以根據(jù)應用的需要將不同的權限授予不同的用戶。用戶對自己建立的基本表和視圖擁有全部的操作權限,并且可以用GRANT語句把其中某些權限授予其他用戶。被授權的用戶如果有“繼續(xù)授權”的許可,還可以把獲得的權限再授予其他用戶。所有授予出去的權力在必要時又都可以用REVOKE語句收回。8.7.1授權與回收三、創(chuàng)建數(shù)據(jù)庫模式的權限GRANT和REVOKE語句向用戶授予或收回對數(shù)據(jù)的操作權限。對數(shù)據(jù)庫模式的授權則由DBA在創(chuàng)建用戶時實現(xiàn)。CREATEUSER語句一般格式:
CREATEUSER<username>[WITH][DBA|RESOURCE|CONNECT]說明:只有系統(tǒng)的超級用戶才有權創(chuàng)建一個新的數(shù)據(jù)庫用戶新創(chuàng)建的數(shù)據(jù)庫用戶有三種權限:CONNECT、RESOURCE和DBACREATEUSER命令中如果沒有指定創(chuàng)建的新用戶的權限,默認該用戶擁有CONNECT權限。擁有CONNECT權限的用戶不能創(chuàng)建新用戶,不能創(chuàng)建模式,也不能創(chuàng)建基本表;只能登錄數(shù)據(jù)庫。
擁有RESOURCE權限的用戶能創(chuàng)建基本表和視圖,成為所創(chuàng)建對象的屬主。但是不能創(chuàng)建模式,不能創(chuàng)建新的用戶
擁有DBA權限的用戶是系統(tǒng)的超級用戶,可以創(chuàng)建新的用戶、創(chuàng)建模式、創(chuàng)建基本表和視圖;DBA擁有對所有數(shù)據(jù)庫對象的存取權限,還可以把這些權限授予一般用戶。
授權與回收擁有的權限可否執(zhí)行的操作CREATEUSERCREATESCHEMACREATETABLE登錄數(shù)據(jù)庫執(zhí)行數(shù)據(jù)查詢和操作DBA可以可以可以可以RESOURCE不可以不可以可以可以CONNECT不可以不可以不可以可以,但必須擁有相應權限8.7.3數(shù)據(jù)庫角色考慮一個有很多出納的銀行。每一個出納必須對同一組關系具有同種類型的權限。8.7.3數(shù)據(jù)庫角色數(shù)據(jù)庫角色是被命名的一組與數(shù)據(jù)庫操作相關的權限,角色是權限的集合??梢詾橐唤M具有相同權限的用戶創(chuàng)建一個角色,使用角色來管理數(shù)據(jù)庫權限可以簡化授權的過程。8.7.3數(shù)據(jù)庫角色若一個公司多個出納,建立一個teller用戶號,允許每一個出納用這個出納用戶號來連接連接數(shù)據(jù)庫。該機制的問題是它無法鑒別出到底哪個出納執(zhí)行了事務,從而導致安全隱患。應用角色的好處是需要每個用戶用自己的用戶號連接數(shù)據(jù)庫。
8.7.3數(shù)據(jù)庫角色一、角色的創(chuàng)建創(chuàng)建角色的SQL語句格式:
CREATEROLE<角色名>
剛剛創(chuàng)建的角色是空的,沒有任何內(nèi)容可以用GRANT為角色授權。8.7.3數(shù)據(jù)庫角色二、給角色授權
GRANT<權限>[,<權限>]...ON<對象類型><對象名>TO<用戶>[,<用戶>]...DBA和用戶可以利用GRANT語句將權限授予某一個或幾個角色8.7.3數(shù)據(jù)庫角色三、將一個角色授予其他的角色或用戶
GRANT<角色1>[,<角色2>]…TO<角色3>[,<用戶1>]…[WITHADMINOPTION]該語句把角色授予某用戶,或授予另一個角色。這樣,一個角色(例如角色3)所擁有的權限就是授予它的全部角色(例如角色1和角色2)所包含的權限的總合。8.7.3數(shù)據(jù)庫角色
任何可以授予一個用戶的權限都可以授予一個角色。給用戶分配角色就跟給用戶授權一樣。和其他授權一樣,一個用戶也可以被授予給他人分配角色的權限。這樣,可以授予支行經(jīng)理分配出納角色的權限。8.7.3數(shù)據(jù)庫角色如果指定了WITHADMINOPTION子句,則獲得某種權限的角色或用戶還可以把這種權限再授予其他的角色。一個角色包含的權限包括直接授予這個角色的全部權限加上其他角色授予這個角色的全部權限。withadminoption用于系統(tǒng)權限授權,withgrantoption用于對象授權。
8.7.4權限的收回角色權限的收回
REVOKE<權限>[,<權限>]...
ON<對象類型><對象名>FROM<角色>[,<角色>]...用戶可以回收角色的權限REVOKE動作的執(zhí)行者或者是角色的創(chuàng)建者,或者擁有在這個(些)角色上的ADMINOPTION
8.7.4權限的收回[例5]通過角色來實現(xiàn)將一組權限授予一個用戶可以分為以下步驟來完成:1、首先創(chuàng)建一個角色R1CREATEROLER12、然后使用GRANT語句,使角色R1擁有S表的SELECT、UPDATE、INSERT權限
GRANTSELECT,UPDATE,INSERTONTABLES
TOR13、將這個角色授予王平,張明,趙玲
GRANTR1TO王平,張明,趙玲4、可以一次性的通過R1來回收王平的這3個權限
REVOKER1FROM王平[例6]角色的權限修改
GRANTDELETE
ONTABLES
TOR1
REVOKESELECTONTABLESFROMR1通過角色的使用可以使自主授權的執(zhí)行更加靈活、方便從一個用戶/角色那里收回權限可能導致其他用戶/角色也失去該權限。這一行為稱作級聯(lián)收回。在大多數(shù)數(shù)據(jù)庫系統(tǒng)中,級聯(lián)是默認行為,因此關鍵字
cascade可以忽略。revoke語句也可以指定restrict:revokeselectonbranchfromU1,U2,U3
restrict
這種情況下,如果存在任何級聯(lián)收回,系統(tǒng)就返回一個錯誤,并且不執(zhí)行收回的動作
8.7.4權限的收回下面的revoke語句僅僅收回grantoption.而并不是真正收回select權限。revokegrantoptionforselectonbranchfromU1
級聯(lián)回收在許多情況下是不合適的。假定Mary具有managrer角色,分配給Johnteller角色,然后manager角色從Mary處收回(也許由于Mary離開了公司);John仍然在職,并且還應該保持teller角色。8.7.4權限的收回
為了處理以上情況,S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 管網(wǎng)地上敷設張志英課件
- 河北科技大學《工程問題C++語言求解》2023-2024學年第二學期期末試卷
- 鶴崗師范高等??茖W校《學術寫作及文獻檢索》2023-2024學年第二學期期末試卷
- 2025屆田家庵區(qū)小升初數(shù)學自主招生備考卷含解析
- 江西婺源茶業(yè)職業(yè)學院《臨床分子生物學檢驗技術》2023-2024學年第二學期期末試卷
- 博爾塔拉蒙古自治州2025屆四下數(shù)學期末質量檢測試題含解析
- 河北司法警官職業(yè)學院《FORTRAN語言程序設計》2023-2024學年第二學期期末試卷
- 南京藝術學院《田間試驗方法與技能田間》2023-2024學年第二學期期末試卷
- 輕奢生活方式的新寵-走進時尚健康領域里的傳統(tǒng)中醫(yī)藥養(yǎng)生之宴
- 金融行業(yè)如何利用視頻進行品牌傳播
- 人教版七年級數(shù)學下冊 第五章 相交線與平行線5.4 平移(課件)
- 數(shù)學之美:欣賞數(shù)學的優(yōu)雅與美麗
- 2023高考語文文言文復習:《說苑》練習題(含答案解析)
- 成都印鈔公司招聘考試題
- 低血糖健康宣教
- 跨文化商務交際導論-教學課件Unit 2 Intercultural business communication
- 《射頻同軸電纜》課件2
- 餐飲經(jīng)營分析會報告
- 口腔頜面部感染患者的營養(yǎng)狀況及輔助營養(yǎng)治療策略
- 基層公職人員禁毒知識講座
- 以工代賑政策培訓課件
評論
0/150
提交評論