數(shù)據(jù)庫系統(tǒng)概論:第8章 應(yīng)用設(shè)計(jì)和開發(fā)_第1頁
數(shù)據(jù)庫系統(tǒng)概論:第8章 應(yīng)用設(shè)計(jì)和開發(fā)_第2頁
數(shù)據(jù)庫系統(tǒng)概論:第8章 應(yīng)用設(shè)計(jì)和開發(fā)_第3頁
數(shù)據(jù)庫系統(tǒng)概論:第8章 應(yīng)用設(shè)計(jì)和開發(fā)_第4頁
數(shù)據(jù)庫系統(tǒng)概論:第8章 應(yīng)用設(shè)計(jì)和開發(fā)_第5頁
已閱讀5頁,還剩72頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第8章應(yīng)用設(shè)計(jì)和開發(fā)吉林大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院數(shù)據(jù)庫系統(tǒng)概論8.6觸發(fā)器觸發(fā)器(Trigger)是用戶定義在關(guān)系表上的一類由事件驅(qū)動的特殊過程定義之后,任何用戶對表的增加、刪除、修改操作均由由服務(wù)器自動激活相應(yīng)的觸發(fā)器。觸發(fā)器類似于約束,但是比約束更加靈活,可以實(shí)施比FOREIGNKEY約束、CHECK約束更為復(fù)雜的檢查和操作,具有更精細(xì)和更強(qiáng)大的數(shù)據(jù)控制能力8.6觸發(fā)器觸發(fā)囂(trigger)是一條語句,當(dāng)對數(shù)據(jù)庫修改時,它自動被系統(tǒng)執(zhí)行。要設(shè)置觸發(fā)器機(jī)制,我們必須滿足兩個要求:

1.指明什么條件下觸發(fā)器被執(zhí)行。它被分解為一個引起觸發(fā)器被檢測的事件和一個觸發(fā)器執(zhí)行必須滿足的條件。

2.指明觸發(fā)器執(zhí)行時的動作。觸發(fā)器并不是SQL92或SQL99核心SQL規(guī)范的內(nèi)容,但是很多RDBMS很早就支持觸發(fā)器,因此不同的RDBMS實(shí)現(xiàn)的觸發(fā)器語法也會有所不同。8.6觸發(fā)器數(shù)據(jù)庫就像存儲普通數(shù)據(jù)一樣存儲觸發(fā)器,所以它們被永久保存,也可以被所有的數(shù)據(jù)庫操作訪問。我們一旦把一個觸發(fā)器輸入數(shù)據(jù)庫,只要指定的事件發(fā)生,相應(yīng)的條件被滿足,數(shù)據(jù)庫系統(tǒng)就有責(zé)任去執(zhí)行它。8.6.1對觸發(fā)器的需求

對于警示或滿足特定條件時自動執(zhí)行某項(xiàng)任務(wù)來說,觸發(fā)器是非常有用的機(jī)制例如,假設(shè)銀行處理透支時,不是將賬戶余額設(shè)成負(fù)值,而是將賬戶余額設(shè)成零,并且建一筆貸款,其金額為透支額。這筆貸款的貸款號等于該透支賬戶的賬號

8.6.1對觸發(fā)器的需求假設(shè)Jones從賬戶支出一些錢,導(dǎo)致賬戶余額變成負(fù)值。令t代表balance為負(fù)值的賬戶元組。在loan關(guān)系中插入一條新元組s:

s[loan_number]=t[account_number]

s[branch_name]=t[brance_name]

s[amount]=-t[balance]

在borrower關(guān)系中插入一條新元組u:

u[customer_name]=“Jones”

u[loan_number]=t[account_number]

將t[balance]設(shè)為零。8.6.1對觸發(fā)器的需求另一個應(yīng)用觸發(fā)器的例子假設(shè)一個倉庫希望每種商品的庫存保持一個最小量;當(dāng)某種商品的庫存少于最小值的時候,自動發(fā)出一個訂單。觸發(fā)器就是這樣執(zhí)行業(yè)務(wù)規(guī)則的:在更新某種商品的庫存的時候,觸發(fā)器會比較這種商品的當(dāng)前庫存和它的最小庫存,如果庫存數(shù)量等于或小于最小值,一個新的訂單就會被添加到orders關(guān)系中。

8.6.1對觸發(fā)器的需求

注意,觸發(fā)器系統(tǒng)通常不能執(zhí)行數(shù)據(jù)庫以外的更新,因此,在上面的庫存補(bǔ)充的例子中,我們不能用一個觸發(fā)器直接對外部世界下訂單,而是在orders關(guān)系中添加一個訂單記錄。我們必須另外創(chuàng)建一個持久運(yùn)行的系統(tǒng)進(jìn)程來周期性掃描orders關(guān)系并訂購產(chǎn)品。這個系統(tǒng)進(jìn)程也要注意orders關(guān)系中哪些元組已經(jīng)被處理了以及什么時候下的訂單。這個進(jìn)程同時跟蹤訂單的交貨情況,當(dāng)意外發(fā)生時,負(fù)責(zé)警示管理人員。8.6.2SQL中的觸發(fā)器

雖然在SQL:1999前觸發(fā)器不是SQL標(biāo)準(zhǔn)的一部分,但是以SQL為基礎(chǔ)的數(shù)據(jù)庫系統(tǒng)廣泛應(yīng)用了觸發(fā)器。不幸的是,每一個數(shù)據(jù)庫系統(tǒng)使用它們各自的觸發(fā)器語法,導(dǎo)致相互之間不兼容。我們在圖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ā)器在任何一次對關(guān)系account的更新執(zhí)行之后都會啟動。一個SQL更新語句可以更新關(guān)系中的多個元組,在觸發(fā)器代碼中的foreachrow語句可以顯式地在每一個更新行上迭代。referrencingnewrowas語句建立了一個變量nrow(稱為過渡變量(transitionvariable))。用來存儲更新行的更新后的值。

when語句指定一個條件nrow.balance<0.僅對于滿足條件的元組系統(tǒng)才會執(zhí)行觸發(fā)器中的其余部分。beginatomic...end語句用來將多行SQL語句集成為一個復(fù)合語句。兩個在begin…end結(jié)構(gòu)之間的insert語句執(zhí)行了在borrower和loan關(guān)系中建立新元組來表示新貸款的任務(wù)。update語句用來把賬戶余額從先前的負(fù)值清回.

觸發(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ā)器的目標(biāo)表4.觸發(fā)事件:可以是INSERT、DELETE或UPDATE也可以是這幾個事件的組合,如INSERTORDELETE等UPDATE后面還可以有OF<觸發(fā)列>,進(jìn)一步指明修改哪些列時觸發(fā)器激活5.觸發(fā)器類型行級觸發(fā)器(FOREACHROW)語句級觸發(fā)器(FOREACHSTATEMENT)例如,假設(shè)在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)建存儲過程的調(diào)用如果是行級觸發(fā)器,在after和before兩種情況下,用戶都可以在過程體中使用NEW和OLD引用UPDATE/INSERT事件之后的新值和UPDATE和DELETE事件之前的舊值。如果是語句級觸發(fā)器,則不能在觸發(fā)動作體中使用NEW和OLD進(jìn)行引用[例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ā)器,當(dāng)教師表Teacher的工資發(fā)生變化后就自動在工資變化表Sal_log中增加一條相應(yīng)記錄首先建立工資變化表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ù)庫服務(wù)器自動執(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ā)器,并且只能由具有相應(yīng)權(quán)限的用戶刪除。[例4]刪除教師表Teacher上的觸發(fā)器Insert_SalDROPTRIGGERInsert_SalONTeacher;8.6.3何時不用觸發(fā)器觸發(fā)器有很多好的用途,然而有一些場合最好用別的技術(shù)來處理。例如,在過去,系統(tǒng)設(shè)計(jì)者用觸發(fā)器來維護(hù)概要數(shù)據(jù)。今天的很多數(shù)據(jù)庫系統(tǒng)支持物化視圖,這使維護(hù)概要數(shù)據(jù)的方法更簡單。

設(shè)計(jì)者也用觸發(fā)器來復(fù)制數(shù)據(jù)庫;他們在每一個關(guān)系的插入/刪除更新的操作上使用觸發(fā)器,跟蹤其改變并將這些變更記錄在稱為change或delta的關(guān)系上。一個單獨(dú)的進(jìn)程將這些改變拷貝到數(shù)據(jù)庫的副本,系統(tǒng)對副本執(zhí)行修改。然而,現(xiàn)代的數(shù)據(jù)庫系統(tǒng)提供內(nèi)置的數(shù)據(jù)庫復(fù)制工具,使得復(fù)制在大多數(shù)情況下不必使用觸發(fā)器。實(shí)際上,觸發(fā)器的很多應(yīng)用,包括我們透支觸發(fā)器的例子,可以用適當(dāng)?shù)拇鎯^程取代。例如,假定對account的balance屬性的更新僅通過一個特殊的存儲過程完成。該過程會依次檢查負(fù)的余額,執(zhí)行透支觸發(fā)器的動作。編程人員應(yīng)當(dāng)小心,不要直接更新balance的值,而是僅僅通過該存儲過程來更新;這可以通過不給應(yīng)用程序/用戶賦予balance屬性的更新權(quán)限,而僅給它們在該存儲過程上的執(zhí)行權(quán)限來保證。類似地,封裝也可以代替重新訂購觸發(fā)器。8.6.3何時不用觸發(fā)器一個觸發(fā)器的動作可以引發(fā)另一個觸發(fā)器。在最壞的情況下,這甚至?xí)?dǎo)致一個無限的觸發(fā)鏈。例如,假設(shè)在一個關(guān)系上的插入觸發(fā)器里有一個動作引起在同一關(guān)系上的另一個(新的)插入,該插入動作也會引起另一個新插入,如此無窮循環(huán)下去。數(shù)據(jù)庫系統(tǒng)通常限制這種觸發(fā)器鏈的長度(例如16或32),把更長的觸發(fā)器鏈看作是一個錯誤8.7SQL中的授權(quán)在4.3節(jié)中我們學(xué)習(xí)了包括delete、insert、select和update權(quán)限在內(nèi)的SQL基本權(quán)限集。除了這些用于訪問數(shù)據(jù)的權(quán)限形式之外,我們也可以(從概念上)賦予用戶另一種修改數(shù)據(jù)庫模式的權(quán)限:

創(chuàng)建新的關(guān)系的授權(quán)。從一個關(guān)系中添加或刪除屬性的授權(quán)。

刪除一個關(guān)系的授權(quán)。數(shù)據(jù)庫安全性問題的提出數(shù)據(jù)庫的一大特點(diǎn)是數(shù)據(jù)可以共享數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)共享不能是無條件的共享例:軍事秘密、國家機(jī)密、市場營銷策略、銷售計(jì)劃、客戶檔案、銀行儲蓄數(shù)據(jù)數(shù)據(jù)共享必然帶來數(shù)據(jù)庫的安全性問題數(shù)據(jù)庫的安全性是指保護(hù)數(shù)據(jù)庫以防止不合法的使用所造成的數(shù)據(jù)泄漏、更改或破壞數(shù)據(jù)庫安全性數(shù)據(jù)庫中數(shù)據(jù)的共享是在DBMS統(tǒng)一的嚴(yán)格的控制之下的共享,即只允許有合法使用權(quán)限的用戶訪問允許他存取的數(shù)據(jù)數(shù)據(jù)庫的安全性和計(jì)算機(jī)系統(tǒng)的安全性,包括計(jì)算機(jī)硬件、操作系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)等的安全性,是緊密聯(lián)系相互支持的。計(jì)算機(jī)系統(tǒng)中的安全模型

應(yīng)用DBMSOS

DB計(jì)算機(jī)系統(tǒng)的安全模型用戶標(biāo)識和鑒定

數(shù)據(jù)庫安全保護(hù)操作系統(tǒng)安全保護(hù)

密碼存儲

在一般計(jì)算機(jī)系統(tǒng)中,安全措施是一級一級層層設(shè)置的

用戶標(biāo)識與鑒別用戶標(biāo)識與鑒別(Identification&Authentication)系統(tǒng)提供的最外層安全保護(hù)措施基本方法系統(tǒng)提供一定的方式讓用戶標(biāo)識自己的名字或身份系統(tǒng)內(nèi)部記錄著所有合法用戶的標(biāo)識;每次用戶要求進(jìn)入系統(tǒng)時,由系統(tǒng)核對用戶提供的身份標(biāo)識通過鑒定后才提供機(jī)器使用權(quán)。用戶標(biāo)識與鑒別常用的方法有:用戶標(biāo)識(UserID):用一個用戶名或者用戶標(biāo)識號來標(biāo)明用戶身份??诹睿≒assword):為了進(jìn)一步核實(shí)用戶,系統(tǒng)常常要求用戶輸入口令。存取控制數(shù)據(jù)庫安全最重要的一點(diǎn)就是確保只授權(quán)給有資格的用戶訪問數(shù)據(jù)庫的權(quán)限,同時令所有未被授權(quán)的人員無法接近數(shù)據(jù),這主要通過數(shù)據(jù)庫系統(tǒng)的存取控制機(jī)制實(shí)現(xiàn)。存取控制

存取控制機(jī)制包括兩部分

定義用戶權(quán)限,并將用戶權(quán)限登記到數(shù)據(jù)字典中合法權(quán)限檢查用戶權(quán)限定義和合法權(quán)檢查機(jī)制一起組成了DBMS的安全子系統(tǒng)定義用戶權(quán)限,并將用戶權(quán)限登記到數(shù)據(jù)字典中用戶對某一數(shù)據(jù)對象的操作權(quán)力稱為權(quán)限。DBMS系統(tǒng)提供適當(dāng)?shù)恼Z言來定義用戶權(quán)限,這些定義經(jīng)過編譯后存放在數(shù)據(jù)字典中,被稱做安全規(guī)則或授權(quán)規(guī)則。合法權(quán)限檢查每當(dāng)用戶發(fā)出存取數(shù)據(jù)庫的操作請求后,DBMS查找數(shù)據(jù)字典,根據(jù)安全規(guī)則進(jìn)行合法權(quán)限檢查,若用戶的操作請求超出了定義的權(quán)限,系統(tǒng)將拒絕執(zhí)行此操作常用存取控制方法自主存取控制(DiscretionaryAccessControl,簡稱DAC)同一用戶對于不同的數(shù)據(jù)對象有不同的存取權(quán)限不同的用戶對同一對象也有不同的權(quán)限用戶還可將其擁有的存取權(quán)限轉(zhuǎn)授給其他用戶強(qiáng)制存取控制(MandatoryAccessControl,簡稱

MAC)每一個數(shù)據(jù)對象被標(biāo)以一定的密級每一個用戶也被授予某一個級別的許可證對于任意一個對象,只有具有合法許可證的用戶才可以存取自主存取控制方法

大型數(shù)據(jù)庫管理系統(tǒng)幾乎都支持自主存取控制,目前的SQL標(biāo)準(zhǔn)也對自主存取控制提供支持,這主要通過SQL的Grant語句和Revoke語句來實(shí)現(xiàn)。自主存取控制方法用戶權(quán)限由兩個要素組成數(shù)據(jù)對象操作類型定義一個用戶的存取權(quán)限就是要定義這個用戶可以在哪些數(shù)據(jù)對象上進(jìn)行哪些類型的操作。在數(shù)據(jù)庫系統(tǒng)中,定義存取權(quán)限稱為授權(quán)。自主存取控制方法關(guān)系系統(tǒng)中的存取權(quán)限對象類型對象操作類型數(shù)據(jù)庫模式Createschema基本表Createtable,Altertalbe模式視圖Createview索引Createindex數(shù)據(jù)基本表和視圖Select,Insert,Update,Delete,References,Allprivileges數(shù)據(jù)屬性列Select,Insert,Update,References,Allprivileges授權(quán)與回收

某個用戶對某類數(shù)據(jù)庫對象具有何種操作權(quán)力是政策問題而不是技術(shù)問題。數(shù)據(jù)庫管理系統(tǒng)的功能是保證這些決定的執(zhí)行。用戶或DBA把授權(quán)決定告知系統(tǒng),由SQL的GRANT和REVOKE語句來完成DBMS把授權(quán)的結(jié)果存入數(shù)據(jù)字典,當(dāng)用戶提出操作請求時,DBMS根據(jù)授權(quán)定義進(jìn)行檢查,以決定是否執(zhí)行操作請求

授權(quán)與回收一、GRANT語句GRANT語句的一般格式:

GRANT<權(quán)限>[,<權(quán)限>]...

ON

<對象類型><對象名>[,<對象類型><對象名>]…

TO<用戶>[,<用戶>]...[WITHGRANTOPTION];誰定義?DBO和表的建立者(即表的屬主)GRANT功能:將對指定操作對象的指定操作權(quán)限授予指定的用戶。WITHGRANTOPTION子句指定了WITHGRANTOPTION子句:

獲得某種權(quán)限的用戶還可以把這種權(quán)限再授予別的用戶。沒有指定WITHGRANTOPTION子句:

獲得某種權(quán)限的用戶只能使用該權(quán)限,不能傳播該權(quán)限例題例1把對s表和c表的全部權(quán)限授予用戶U1和U2GRANTALLPRIVILEGES

ONTABLEs,cTOU1,U2;例題例2把查詢s表和修改學(xué)生學(xué)號的權(quán)限授給用戶U3,并允許他再將此權(quán)限授予其他用戶

GRANTUPDATE(Sno),SELECT ONTABLEs TOU3

WITHGRANTOPTION;傳播權(quán)限執(zhí)行例2后,U3不僅擁有了對表S的select權(quán)限和對學(xué)號列的修改權(quán)限,還可以傳播此權(quán)限:

GRANTUPDATE(Sno),SELECTONsTOU4

WITHGRANTOPTION;

同樣,U4還可以將此權(quán)限授予U5:

GRANTUPDATE(Sno),SELECTONsTOU5

但U5不能再傳播此權(quán)限。

授權(quán)與回收二、REVOKEREVOKE語句的一般格式為:

REVOKE<權(quán)限>[,<權(quán)限>]...[ON<對象類型><對象名>]FROM<用戶>[,<用戶>]...;功能:從指定用戶那里收回對指定對象的指定權(quán)限例題例4把用戶U3修改學(xué)生學(xué)號的權(quán)限收回

REVOKEUPDATE(Sno) ONTABLEs FROMU3;小結(jié):SQL靈活的授權(quán)機(jī)制DBA擁有對數(shù)據(jù)庫中所有對象的所有權(quán)限,并可以根據(jù)應(yīng)用的需要將不同的權(quán)限授予不同的用戶。用戶對自己建立的基本表和視圖擁有全部的操作權(quán)限,并且可以用GRANT語句把其中某些權(quán)限授予其他用戶。被授權(quán)的用戶如果有“繼續(xù)授權(quán)”的許可,還可以把獲得的權(quán)限再授予其他用戶。所有授予出去的權(quán)力在必要時又都可以用REVOKE語句收回。8.7.1授權(quán)與回收三、創(chuàng)建數(shù)據(jù)庫模式的權(quán)限GRANT和REVOKE語句向用戶授予或收回對數(shù)據(jù)的操作權(quán)限。對數(shù)據(jù)庫模式的授權(quán)則由DBA在創(chuàng)建用戶時實(shí)現(xiàn)。CREATEUSER語句一般格式:

CREATEUSER<username>[WITH][DBA|RESOURCE|CONNECT]說明:只有系統(tǒng)的超級用戶才有權(quán)創(chuàng)建一個新的數(shù)據(jù)庫用戶新創(chuàng)建的數(shù)據(jù)庫用戶有三種權(quán)限:CONNECT、RESOURCE和DBACREATEUSER命令中如果沒有指定創(chuàng)建的新用戶的權(quán)限,默認(rèn)該用戶擁有CONNECT權(quán)限。擁有CONNECT權(quán)限的用戶不能創(chuàng)建新用戶,不能創(chuàng)建模式,也不能創(chuàng)建基本表;只能登錄數(shù)據(jù)庫。

擁有RESOURCE權(quán)限的用戶能創(chuàng)建基本表和視圖,成為所創(chuàng)建對象的屬主。但是不能創(chuàng)建模式,不能創(chuàng)建新的用戶

擁有DBA權(quán)限的用戶是系統(tǒng)的超級用戶,可以創(chuàng)建新的用戶、創(chuàng)建模式、創(chuàng)建基本表和視圖;DBA擁有對所有數(shù)據(jù)庫對象的存取權(quán)限,還可以把這些權(quán)限授予一般用戶。

授權(quán)與回收擁有的權(quán)限可否執(zhí)行的操作CREATEUSERCREATESCHEMACREATETABLE登錄數(shù)據(jù)庫執(zhí)行數(shù)據(jù)查詢和操作DBA可以可以可以可以RESOURCE不可以不可以可以可以CONNECT不可以不可以不可以可以,但必須擁有相應(yīng)權(quán)限8.7.3數(shù)據(jù)庫角色考慮一個有很多出納的銀行。每一個出納必須對同一組關(guān)系具有同種類型的權(quán)限。8.7.3數(shù)據(jù)庫角色數(shù)據(jù)庫角色是被命名的一組與數(shù)據(jù)庫操作相關(guān)的權(quán)限,角色是權(quán)限的集合??梢詾橐唤M具有相同權(quán)限的用戶創(chuàng)建一個角色,使用角色來管理數(shù)據(jù)庫權(quán)限可以簡化授權(quán)的過程。8.7.3數(shù)據(jù)庫角色若一個公司多個出納,建立一個teller用戶號,允許每一個出納用這個出納用戶號來連接連接數(shù)據(jù)庫。該機(jī)制的問題是它無法鑒別出到底哪個出納執(zhí)行了事務(wù),從而導(dǎo)致安全隱患。應(yīng)用角色的好處是需要每個用戶用自己的用戶號連接數(shù)據(jù)庫。

8.7.3數(shù)據(jù)庫角色一、角色的創(chuàng)建創(chuàng)建角色的SQL語句格式:

CREATEROLE<角色名>

剛剛創(chuàng)建的角色是空的,沒有任何內(nèi)容可以用GRANT為角色授權(quán)。8.7.3數(shù)據(jù)庫角色二、給角色授權(quán)

GRANT<權(quán)限>[,<權(quán)限>]...ON<對象類型><對象名>TO<用戶>[,<用戶>]...DBA和用戶可以利用GRANT語句將權(quán)限授予某一個或幾個角色8.7.3數(shù)據(jù)庫角色三、將一個角色授予其他的角色或用戶

GRANT<角色1>[,<角色2>]…TO<角色3>[,<用戶1>]…[WITHADMINOPTION]該語句把角色授予某用戶,或授予另一個角色。這樣,一個角色(例如角色3)所擁有的權(quán)限就是授予它的全部角色(例如角色1和角色2)所包含的權(quán)限的總合。8.7.3數(shù)據(jù)庫角色

任何可以授予一個用戶的權(quán)限都可以授予一個角色。給用戶分配角色就跟給用戶授權(quán)一樣。和其他授權(quán)一樣,一個用戶也可以被授予給他人分配角色的權(quán)限。這樣,可以授予支行經(jīng)理分配出納角色的權(quán)限。8.7.3數(shù)據(jù)庫角色如果指定了WITHADMINOPTION子句,則獲得某種權(quán)限的角色或用戶還可以把這種權(quán)限再授予其他的角色。一個角色包含的權(quán)限包括直接授予這個角色的全部權(quán)限加上其他角色授予這個角色的全部權(quán)限。withadminoption用于系統(tǒng)權(quán)限授權(quán),withgrantoption用于對象授權(quán)。

8.7.4權(quán)限的收回角色權(quán)限的收回

REVOKE<權(quán)限>[,<權(quán)限>]...

ON<對象類型><對象名>FROM<角色>[,<角色>]...用戶可以回收角色的權(quán)限REVOKE動作的執(zhí)行者或者是角色的創(chuàng)建者,或者擁有在這個(些)角色上的ADMINOPTION

8.7.4權(quán)限的收回[例5]通過角色來實(shí)現(xiàn)將一組權(quán)限授予一個用戶可以分為以下步驟來完成:1、首先創(chuàng)建一個角色R1CREATEROLER12、然后使用GRANT語句,使角色R1擁有S表的SELECT、UPDATE、INSERT權(quán)限

GRANTSELECT,UPDATE,INSERTONTABLES

TOR13、將這個角色授予王平,張明,趙玲

GRANTR1TO王平,張明,趙玲4、可以一次性的通過R1來回收王平的這3個權(quán)限

REVOKER1FROM王平[例6]角色的權(quán)限修改

GRANTDELETE

ONTABLES

TOR1

REVOKESELECTONTABLESFROMR1通過角色的使用可以使自主授權(quán)的執(zhí)行更加靈活、方便從一個用戶/角色那里收回權(quán)限可能導(dǎo)致其他用戶/角色也失去該權(quán)限。這一行為稱作級聯(lián)收回。在大多數(shù)數(shù)據(jù)庫系統(tǒng)中,級聯(lián)是默認(rèn)行為,因此關(guān)鍵字

cascade可以忽略。revoke語句也可以指定restrict:revokeselectonbranchfromU1,U2,U3

restrict

這種情況下,如果存在任何級聯(lián)收回,系統(tǒng)就返回一個錯誤,并且不執(zhí)行收回的動作

8.7.4權(quán)限的收回下面的revoke語句僅僅收回grantoption.而并不是真正收回select權(quán)限。revokegrantoptionforselectonbranchfromU1

級聯(lián)回收在許多情況下是不合適的。假定Mary具有managrer角色,分配給Johnteller角色,然后manager角色從Mary處收回(也許由于Mary離開了公司);John仍然在職,并且還應(yīng)該保持teller角色。8.7.4權(quán)限的收回

為了處理以上情況,S

溫馨提示

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

評論

0/150

提交評論