版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第七章數(shù)據(jù)庫的安全性與完整性
7.1基本概念數(shù)據(jù)庫的安全性:是指保護(hù)數(shù)據(jù)庫以防止不合法的使用所造成的數(shù)據(jù)泄露、更改或破壞。數(shù)據(jù)庫安全性是一個(gè)涵蓋許多問題的廣闊領(lǐng)域。安全性的類型:某些信息的訪問關(guān)系到法律和倫理的問題。有些信息可能會認(rèn)為是屬于個(gè)人信息,未授權(quán)人員不能對其進(jìn)行訪問。有關(guān)政府、機(jī)構(gòu)或公司層次上的政策問題,這些政策確定哪些信息不應(yīng)該向公眾公開。與系統(tǒng)有關(guān)的問題。系統(tǒng)級上應(yīng)加強(qiáng)哪幾類安全功能(如:物理硬件級、OS級、DBMS級)一些組織需要把安全性問題劃分為多個(gè)安全級別(如:絕密、機(jī)密、秘密、公開)。
數(shù)據(jù)庫的完整性:是指數(shù)據(jù)的正確性、有效性和相容性。7.2數(shù)據(jù)庫安全性控制
在一個(gè)多用戶數(shù)據(jù)庫系統(tǒng)中,DBMS必須提供相應(yīng)的技術(shù)以保證特定的用戶或用戶組,只能訪問數(shù)據(jù)庫的指定部分,而不能訪問數(shù)據(jù)庫的其他部分。典型的DBMS包含一個(gè)數(shù)據(jù)庫安全和授權(quán)子系統(tǒng),由它來負(fù)責(zé)實(shí)現(xiàn)一個(gè)數(shù)據(jù)庫的安全性功能以避免發(fā)生未授權(quán)的訪問。
DBMS的安全子系統(tǒng)主要包括兩部分:
定義用戶權(quán)限:
并將用戶權(quán)限登記到數(shù)據(jù)字典中。
合法權(quán)限檢查:若用戶的操作請求超出了定義的權(quán)限,系統(tǒng)將拒絕執(zhí)行此操作。7.2數(shù)據(jù)庫安全性控制安全措施應(yīng)該一級一級層層設(shè)置。計(jì)算機(jī)系統(tǒng)的安全模型:用戶標(biāo)識和鑒別DB數(shù)據(jù)密碼存儲OS安全保護(hù)DBMS存取控制7.2數(shù)據(jù)庫安全性控制數(shù)據(jù)庫安全控制方法一、用戶標(biāo)識與鑒別1.利用用戶自身具備的各種自然特征標(biāo)識自己和提供鑒別的依據(jù)。2.利用用戶持有的證件。3.利用口令??诹畋C芸刹捎玫囊恍┓椒ǎ海?)擴(kuò)大口令集和口令長度。(2)規(guī)定口令的生效時(shí)間,定期或不定期地更換口令。(3)設(shè)置多層口令系統(tǒng)。(4)設(shè)置動態(tài)口令。7.2數(shù)據(jù)庫安全性控制二、存取控制1.存取控制方法(1)自主存取控制(DAC-DiscretionaryAccessControl
)
這種方法是基于授予和收回權(quán)限的機(jī)制。它已經(jīng)發(fā)展成為關(guān)系數(shù)據(jù)庫系統(tǒng)的主要安全機(jī)制。這種機(jī)制是一種“all-or-nothing”方法,即一個(gè)用戶要么擁有該特權(quán),要么沒有該特權(quán)。但是在很多應(yīng)用中,還需要另外一種安全性策略,這種策略需要在安全性級別的基礎(chǔ)上對數(shù)據(jù)或用戶進(jìn)行分類。
7.2數(shù)據(jù)庫安全性控制(2)強(qiáng)制存取控制(MAC-MandatoryAccessControl)
在強(qiáng)制存取控制(MAC)方法中,每一個(gè)數(shù)據(jù)對象被標(biāo)以一定的密級,每一個(gè)用戶也被授予某一個(gè)級別的許可證。對于任意一個(gè)對象,只有具有合法許可證的用戶才可以存取。強(qiáng)制存取控制因此相對比較嚴(yán)格。
MAC適用于對數(shù)據(jù)有嚴(yán)格而固定密級分類的部門。主體是指數(shù)據(jù)庫中數(shù)據(jù)訪問者(用戶、DBA)、進(jìn)程、線程等,是系統(tǒng)中的活動實(shí)體??腕w是指數(shù)據(jù)庫中數(shù)據(jù)及其載體(表、視圖、索引、存儲過程等),是系統(tǒng)中的被動實(shí)體。7.2數(shù)據(jù)庫安全性控制
對于主體和客體,DBMS為它們每個(gè)實(shí)例(值)指派一個(gè)敏感度標(biāo)記(Label)。敏感度標(biāo)記被分成若干級別,例如絕密、機(jī)密、秘密、公開等。主體的敏感度標(biāo)記稱為許可證級別??腕w的敏感度標(biāo)記稱為密級??腕w子集主體子集訪問7.2數(shù)據(jù)庫安全性控制
MAC機(jī)制就是通過對比主體的Label和客體的Label,最終確定主體是否能夠存取客體。當(dāng)某一主體以標(biāo)記label注冊入系統(tǒng)時(shí),系統(tǒng)要求他對任何客體的存取必須遵循如下規(guī)則:
①
僅當(dāng)主體的許可證級別大于或等于客體的密級時(shí),該主體才能讀取相應(yīng)的客體;
②
僅當(dāng)主體的許可證級別小于或等于客體的密級時(shí),該主體才能寫相應(yīng)的客體。這兩種規(guī)則的共同點(diǎn)在于它們均禁止了擁有高許可證級別的主體更新低密級的數(shù)據(jù)對象,從而防止了敏感數(shù)據(jù)的泄漏。自主訪問控制與強(qiáng)制訪問控制的比較
自主訪問控制優(yōu)點(diǎn):有高度的靈活性,這使得它適用于多個(gè)應(yīng)用領(lǐng)域。缺點(diǎn):防范惡意攻擊的脆弱性。因?yàn)橐坏┍皇跈?quán)用戶訪問以后,自主授權(quán)模型就不能對如何傳播和如何使用信息進(jìn)行任何的控制了。
強(qiáng)制訪問控制優(yōu)點(diǎn):可以保證更高程度的保護(hù),防止了信息的非法流動。適用于需要高度保護(hù)的政府、軍事等應(yīng)用。缺點(diǎn):過于嚴(yán)格,要求將主體和客體嚴(yán)格地劃分到安全級別中,因此僅適用于少數(shù)環(huán)境。7.2數(shù)據(jù)庫安全性控制2.自主存取控制的實(shí)現(xiàn)(1)用戶分類和權(quán)限
用戶:系統(tǒng)用戶(DBA)、數(shù)據(jù)對象屬主(owner)、一般用戶、公共用戶(public)。
權(quán)限:包括數(shù)據(jù)訪問權(quán)限(讀、插入、修改、刪除等)和數(shù)據(jù)庫模式修改權(quán)限(索引、資源、修改、撤消等)兩類。7.2數(shù)據(jù)庫安全性控制(2)授權(quán)
GRANT語句向用戶授予操作權(quán)限。一般格式為:
GRANT{<權(quán)限>[,<權(quán)限>]…|ALL}ON<對象類型><對象名>TO{<用戶>[,<用戶>]...|PUBLIC}
[WITHGRANTOPTION]
語義為:將對指定操作對象的指定操作權(quán)限授予指定的用戶。
ALL:所有權(quán)限
PUBLIC:公共用戶對不同類型的操作對象有不同的操作權(quán)限。
可將此權(quán)限轉(zhuǎn)授7.2數(shù)據(jù)庫安全性控制例:把查詢表SC和修改其學(xué)號的權(quán)限授給用戶
U2和U4。
GRANTSELECT,
UPDATE(Sno)ONTABLESCTOU2,U4;例:把對表SC的INSERT權(quán)限授給用戶U5,并允許將此權(quán)限再授予其他用戶。
GRANTINSERTONTABLESCTOU5WITHGRANTOPTION;
U5還可以將此權(quán)限授予U6:
GRANTINSERTONTABLESCTOU6;PUBLIC;全體。U6能不能再傳播此權(quán)限?7.2數(shù)據(jù)庫安全性控制例:
DBA把在數(shù)據(jù)庫DB1中建立表的權(quán)限授予用戶U1。
GRANTCREATETABONDATABASEDB1TOU1;U1隱含權(quán)限?(3)收回權(quán)限格式:REVOKE{<權(quán)限>[,<權(quán)限>]…|ALL}ON<對象類型><對象名>FROM{<用戶>[,<用戶>]...|PUBLIC}[CASCADE|RESTRICT];CASCADE:級聯(lián)(但系統(tǒng)只收回直接或間接從某處獲得的權(quán)限)
例:P.215圖7-47.2數(shù)據(jù)庫安全性控制(4)數(shù)據(jù)庫角色的授權(quán)角色:
是權(quán)限的集合。數(shù)據(jù)庫角色:是一組對數(shù)據(jù)庫進(jìn)行各種操作的權(quán)限的集合。將某一組用戶設(shè)置為某一角色,他將擁有該角色中的每一個(gè)權(quán)限。這樣只要對角色進(jìn)行權(quán)限設(shè)置便可以實(shí)現(xiàn)對所有用戶權(quán)限的設(shè)置,大大減少了管理員的工作量,簡化了授權(quán)的過程。用戶與角色之間存在多對多的聯(lián)系。創(chuàng)建角色必須具有createrole系統(tǒng)權(quán)限。7.2數(shù)據(jù)庫安全性控制創(chuàng)建角色:
CREATEROLE<角色名>將權(quán)限授予角色:
GRANT<權(quán)限>[,<權(quán)限>]…ON<對象類型><對象名>TO<角色>[,<角色>]...將角色授予用戶:
GRANT<角色>[,<角色>]…TO<角色>[,<用戶>]...[WITHADMINOPTION]可將此權(quán)限轉(zhuǎn)授回收角色的權(quán)限:
REVOKE<權(quán)限>[,<權(quán)限>]…ON<對象類型><對象名>FROM<角色>[,<角色>]...7.2數(shù)據(jù)庫安全性控制[例7-7]
CREATEROLEC1;
GRANTSELECT,INSERT
ONTABLEStudentTOC1;
GRANTC1TOU1,U2,U3;
GRANTUPDATE,DELETEONTABLEStudentTOC1;
REVOKEC1FROMU3;REVOKEINSERTONTABLEStudentFROMC1;7.2數(shù)據(jù)庫安全性控制三、視圖機(jī)制通過視圖機(jī)制把要保密的數(shù)據(jù)對無權(quán)存取的用戶隱藏起來,從而自動地對數(shù)據(jù)提供一定程度的安全保護(hù)。[例7.8]
創(chuàng)建視圖:CREATEVIEWstudent_maleASSELECT*FROMstudentWHEREsex=‘男’授權(quán)1:GRANTSELECT,INSERTONVIEW
student_maleTOU1授權(quán)2:GRANTALLPRIVILEGESONVIEW
student_maleTOU37.2數(shù)據(jù)庫安全性控制四、數(shù)據(jù)加密
是在不安全的環(huán)境中維護(hù)數(shù)據(jù)安全性的一種方法。加密技術(shù)首先使用某個(gè)預(yù)定的加密密鑰對數(shù)據(jù)應(yīng)用加密算法,然后結(jié)果數(shù)據(jù)必須要使用解密密鑰進(jìn)行解密,以恢復(fù)原來的數(shù)據(jù)。五、審計(jì)
審計(jì)是對選定的用戶動作的監(jiān)控和記錄,以監(jiān)測可能的不合法行為。審計(jì)常用于:(1)審查可疑的活動。(2)監(jiān)視和收集關(guān)于數(shù)據(jù)庫活動的數(shù)據(jù)。7.3數(shù)據(jù)庫的完整性控制一、數(shù)據(jù)庫的完整性數(shù)據(jù)庫的完整性:是指數(shù)據(jù)的正確性、有效性和相容性。說明:完整性是為了防止數(shù)據(jù)庫中存在不符合語義的數(shù)據(jù),防止錯(cuò)誤信息的輸入和輸出。
數(shù)據(jù)庫完整性約束條件:加在數(shù)據(jù)庫數(shù)據(jù)之上的語義約束條件。完整性檢查:DBMS中檢查數(shù)據(jù)是否滿足完整性條件的機(jī)制。
DBMS的完整性控制機(jī)制應(yīng)具有三個(gè)方面的功能:(1)定義功能:提供定義完整性約束條件的機(jī)制。(2)檢查功能:檢查用戶發(fā)出的操作請求是否違背了完整性約束條件。(3)防范功能:如果發(fā)現(xiàn)用戶的操作請求使數(shù)據(jù)違背了完整性約束條件,采取一定的動作來保證數(shù)據(jù)的完整性。
7.3數(shù)據(jù)庫的完整性控制二、SQL中的完整性約束約束分類列級約束:只能應(yīng)用在一列上。表級約束:可以應(yīng)用在一個(gè)表中的多列上。當(dāng)約束用于表級時(shí),應(yīng)按下列形式設(shè)置:
CONSTRAINT<約束名>各種約束形式例:CREATETABLEbook(bidint
NOTNULL,--列級約束
bnamechar(8)NOTNULL,--列級約束
authoridchar(10))7.3數(shù)據(jù)庫的完整性控制1、基本表的約束(1)主碼約束主碼能夠惟一地確定表中的每一條記錄,主碼不能取空值。主碼約束可以保證實(shí)體的完整性。格式:PRIMARYKEY[(<列名表>)]例:CREATETABLEbook(bidint
PRIMARYKEY,
bnamechar(8)NOTNULL,
authoridchar(10))
7.3數(shù)據(jù)庫的完整性控制例:CREATETABLEsc(
snochar(8),
cnochar(4),gradeint,
CONSTRAINTpk_scprimarykey(sno,cno))7.3數(shù)據(jù)庫的完整性控制(2)外碼約束外碼約束主要用來維護(hù)兩個(gè)表之間數(shù)據(jù)的一致性,實(shí)現(xiàn)表之間的參照完整性。格式:
FOREIGNKEY[(<列名表>)]REFERENCES<目標(biāo)表>[(<列名表>)][ONDELETE<參照動作>][ONUPDATE<參照動作>]<參照動作>:NOACTION、CASCADE、RESTRICT、SETNULL、SETDEFAULT7.3數(shù)據(jù)庫的完整性控制例:CREATETABLEauthors(
authorid
intPRIMARYKEY,
authornamechar(20),addresschar(30))CREATETABLEbook(bidintPRIMARYKEY,
bnamechar(8)NOTNULL,
authorid
int,
CONSTRAINTfk_book
FOREIGNKEY(authorid)REFERENCESauthors(authorid))7.3數(shù)據(jù)庫的完整性控制
假定被參照關(guān)系稱為父表,參照關(guān)系稱為子表。當(dāng)刪除(DELETE)或修改(UPDATE)父表中的某行時(shí),對子表采取的動作可有下列的選擇:
CASCADE(級聯(lián)):
刪除或修改父表中的行并自動刪除或修改在子表中匹配的行。
RESTRICT(受限):只有當(dāng)子表外碼中沒有與父表要刪除或修改的主碼相同時(shí),才能刪除父表中的行,否則拒絕執(zhí)行此操作。
SETNULL(置空值):刪除或修改父表中的行并將子表中的外碼設(shè)置為NULL。只有當(dāng)外碼沒有被設(shè)置成NOTNULL時(shí)才有效。
SETDEFAULT(置默認(rèn)值):刪除或修改父表中的行并將子表中的外碼設(shè)置為指定的默認(rèn)值。只有外碼指定了默認(rèn)值時(shí)才有效。
NOTACTION:拒絕對父表進(jìn)行刪除或修改。7.3數(shù)據(jù)庫的完整性控制(3)惟一約束惟一約束用于指定一個(gè)或多個(gè)列的組合值具有惟一性,以防止在列中輸入重復(fù)的值。應(yīng)用場合:每個(gè)表中只能有一個(gè)主碼,因此當(dāng)表中已經(jīng)有一個(gè)主碼時(shí),如果還要保證其他的標(biāo)識符惟一時(shí),就可以使用惟一性約束。例:CREATETABLEstudent(
sno
intPRIMARYKEY,
snamechar(8)NOTNULL,sexchar(2),
cardnochar(18)UNIQUE)7.3數(shù)據(jù)庫的完整性控制(4)檢查約束檢查約束對輸入列或者整個(gè)表中的值設(shè)置檢查條件,以限制輸入值。格式:CHECK(<條件表達(dá)式>)
例:CREATETABLEstudent(
sno
intPRIMARYKEY,
snamechar(8)NOTNULL,sexchar(2),
cardnochar(18)UNIQUE,
CONSTRAINTchk_sexcheck(sexin(‘男’,’女’)))7.3數(shù)據(jù)庫的完整性控制(5)默認(rèn)約束默認(rèn)約束指在插入操作中沒有提供輸入值時(shí),系統(tǒng)自動指定值。例:CREATETABLEstudent(
sno
intPRIMARYKEY,
snamechar(8)NOTNULL,sexchar(2)DEFAULT‘男’
cardnochar(18)UNIQUE,
CONSTRAINTchk_sexcheck(sexin(‘男’,’女’)))7.3數(shù)據(jù)庫的完整性控制2、域約束
CREATEDOMAIN<域名><域類型>CHECK(<條件>)[例7.13]CREATEDOMAINGradeCHAR(1)DEFAULT‘?’CONSTRAINTValid_gradeCHECK(VALUEIN(‘A’,’B’,’C’,’D’,’E’,’?’));7.3數(shù)據(jù)庫的完整性控制3、斷言
CHECK子句只對定義它的表起作用,對其它表不起作用。[例7.11]對關(guān)系SC的定義加入子句:
CHECK(snoIN(SELECTsno
FROMStudent))CHECK(cnoIN(SELECTcno
FROMCourse))
當(dāng)對表Student中刪除一個(gè)元組時(shí),這個(gè)操作與關(guān)系SC的CHECK無關(guān)。
CHECK子句中的條件盡量不要涉及其他關(guān)系。7.3數(shù)據(jù)庫的完整性控制當(dāng)約束條件涉及多個(gè)表、使用聚集操作時(shí)應(yīng)使用斷言。
格式:CREATEASSERTION<斷言名>CHECK(<條件>)[例7.15]每門課程只允許100個(gè)學(xué)生選修。
CREATEASSERTIONAsser1CHECK(ALL(SELECTCOUNT(sno)FROMSCGROUPBYcno)<=100);[例7.16]不允許計(jì)算機(jī)學(xué)院的學(xué)生選修019號課程。
CREATEASSERTIONAsser2CHECKNOTEXISTS(SELECT*FROMStudent,SCWHEREStudent.sno=SC.snoANDStudent.dept=‘計(jì)算機(jī)學(xué)院’ANDSC.cno=‘019’);7.4觸發(fā)器
觸發(fā)器:是靠事件驅(qū)動的特殊過程。觸發(fā)器與存儲過程的區(qū)別:存儲過程通過其他程序的調(diào)用來運(yùn)行,或直接啟動運(yùn)行,可傳遞參數(shù);而觸發(fā)器的啟動運(yùn)行必須由一個(gè)發(fā)生的事件來激發(fā),它是自動隱式運(yùn)行的,觸發(fā)器不能接收參數(shù),也不能被調(diào)用。觸發(fā)器的類型:
DML觸發(fā)器:它是在執(zhí)行insert、update或delete語句時(shí)被激發(fā)執(zhí)行的,它只能定義在表上。
替代觸發(fā)器:是被激發(fā)用以代替執(zhí)行DML語句,它可以定義在表或視圖上。
系統(tǒng)觸發(fā)器:它是在執(zhí)行create、alter或drop語句;執(zhí)行數(shù)據(jù)庫的啟動或關(guān)閉、用戶的登錄或退出語句時(shí)被激發(fā)執(zhí)行的。7.4觸發(fā)器
觸發(fā)器的主要用途:
審計(jì):可記錄登錄數(shù)據(jù)庫的用戶。將更新數(shù)據(jù)的用戶和時(shí)間日期等信息記錄在審計(jì)表中。
實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)規(guī)則:如將被刪除的用戶保存在用戶歷史信息中;更新股票表只能在上市交易時(shí)間內(nèi)??蛇M(jìn)行系統(tǒng)事件的處理:在表中內(nèi)容發(fā)生變更時(shí),自動通知其他程序采取相應(yīng)的處理。
增強(qiáng)表的完整性約束:如更新職工的工資時(shí)更新后的工資不能低于更新前的工資。7.4觸發(fā)器
觸發(fā)器的組成:
觸發(fā)事件觸發(fā)條件觸發(fā)器動作
觸發(fā)器的一般模型:
CREATETRIGGER<觸發(fā)器名>{BEFORE|AFTER|INSTEADOF}<觸發(fā)事件>ON<表名>|<視圖名>[REFERENCING[OLDAS<舊元組變量>][NEWAS<新元組變量>]]
[OLDTABLEAS<舊表名>]][NEWTABLEAS<新表名>]]
[FOREACH{ROW|STATEMENT}][WHEN<觸發(fā)條件>]<SQL語句>7.4觸發(fā)器
<觸發(fā)事件>:INSERT|DELETE|UPDATE[OF<列名列表>]FOREACH{ROW|STATEMENT}:
指定觸發(fā)器的粒度。
FOREACHROW:為行級觸發(fā)器,當(dāng)該觸發(fā)器監(jiān)視的表中的元組發(fā)生改變時(shí),就激活觸發(fā)器,每變更一行就觸發(fā)一次。
FOREACHSTATEMENT(默認(rèn)):為語句級觸發(fā)器。在被監(jiān)控表上執(zhí)行INSERT、DELETE或UPDATE語句,就會激活觸發(fā)器,而不管該語句的執(zhí)行會改變多少元組(即使沒有改變發(fā)生也會激活觸發(fā)器)。該觸發(fā)器就在語句執(zhí)行之前或之后只激發(fā)一次。
REFERENCING:指向更新前或更新后的內(nèi)容。
BEFORE|AFTER|INSTEADOF:
指定觸發(fā)器執(zhí)行的時(shí)機(jī)。7.4觸發(fā)器
在行級觸發(fā)器中,REFERENCING的格式:
REFERENCING[OLDAS<舊行別名>][NEWAS<新行別名>]觸發(fā)事件舊行別名新行別名insert無指定update指定指定delete指定無7.4觸發(fā)器
BEFORE觸發(fā)器(前觸發(fā)器)
在觸發(fā)事件之前執(zhí)行。不允許它們修改數(shù)據(jù)庫,但可以檢測WHEN子句中定義的前提條件,接受或終止觸發(fā)事件。BEFORE觸發(fā)器的一個(gè)典型用途是保持應(yīng)用指定的數(shù)據(jù)完整性。
例:有關(guān)系TS(sno,cno,semester,grade)
CL(cno,semester,limit)
創(chuàng)建一個(gè)觸發(fā)器,它監(jiān)控插入到TS中的元組,以限制課程注冊的人數(shù)。CREATETRIGGERCountCheckBEFOREINSERTONTSREFERENCINGNEWASNFOREACHROWWHEN((SELECTCOUNT(sno)FROMTSWHERETS.cno=N.cnoANDTS.semester=N.semester)>=(SELECTlimitFROMCLWHERECL.cno=N.cnoANDCL.semester=N.semester))ROLLBACK7.4觸發(fā)器
AFTER觸發(fā)器(后觸發(fā)器):在觸發(fā)事件已經(jīng)改變數(shù)據(jù)庫之后執(zhí)行。[例7.18]
規(guī)定修改SC表的grade值時(shí),修改后的值不能低于修改前的值。
CREATETRIGGERTrig_gradeAFTERUPDATEOFgradeONSCREFERENCINGOLDASoldgNEWASnewgFOREACHROWWHEN(oldg.grade>newg.grade)UPDATESCSETgrade=oldg.gradeWHEREsno=newg.snoANDcno=o;觸發(fā)事件觸發(fā)條件觸發(fā)器動作7.4觸發(fā)器
例:有關(guān)系EMP(eno,ename,esex,salary,dno)
創(chuàng)建一個(gè)觸發(fā)器,每次工資增長之后將所有雇員新的平均工資記錄到LOG表中。CREATETRIGGERRecordNewAverageAFTERUPDATEOFsalaryONEMPFOREACHSTATEMENTINSERTINTOLOGVALUES(CURRENT_DATE,(SELECTAVG(salary)FROMEMP))
7.4觸發(fā)器
INSTEADOF觸發(fā)器(替換觸發(fā)器)INSTEADOF觸發(fā)器最普遍的應(yīng)用是對視圖的維護(hù)。視圖上的更新事件可以通過觸發(fā)器監(jiān)控,但替換更新的是視圖的基礎(chǔ)表。
例:有關(guān)系EMP(eno,ename,esex,salary,dno)
DEPT(dno,dname)
有下面的視圖:
CREATEVIEWWorksIn(eno,dname)ASSELECT(EMP.eno,DEPT.dname)FROMEMP,DEPTWHEREEMP.dno=DEPT.dno
7.4觸發(fā)器
假設(shè)在視圖上執(zhí)行下面的操作:
DELETEFROMWorksInWHEREeno=’11111111’
該操作被轉(zhuǎn)換為該視圖基礎(chǔ)表EMP和DEPT上相應(yīng)的操作。但是可能會有多種轉(zhuǎn)換:可以刪除eno為11111111的雇員所在的部門;可以刪除eno為11111111的雇員;可以將雇員元組中的dno字段置為NULL。無法自動決定這三種可能性中哪種是正確的??梢栽O(shè)計(jì)INSTEADOF觸發(fā)器來指定合適的動作。如:CREATETRIGGERWorksInTrigiINSTEADOFDELETEONWorksInREFERENCINGOLDASOFOREACHROW
UPDATEEMPSETdno=NULLWHEREeno=O.enoSQLServer中觸發(fā)器的創(chuàng)建
CREATETRIGGERtrigger_nameON{table|view}[WITHENCRYPTION]--加密文本{{{FOR|AFTER|INSTEADOF}--觸發(fā)類型
{[INSERT][,][UPDATE]}--觸發(fā)事件
AS[{IFUPDATE(column)--測試在指定列上進(jìn)行的INSERT或UPDATE操作
[{AND|OR}UPDATE(column)][…n]|IF(COLUMNS_UPDATED(){bitwise_operator}--測試是否插入或修改了提及的列。
updated_bitmask)
{comparison_operator}column_bitmask[…n]
}]
sql_statement[…n]--觸
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025單位基本建設(shè)合同簡易范文
- 2025年度公司經(jīng)理內(nèi)部審計(jì)與合規(guī)聘用合同3篇
- 二零二五年度環(huán)保建材工廠設(shè)備轉(zhuǎn)讓合同3篇
- 2025年度量子信息內(nèi)部股東股權(quán)轉(zhuǎn)讓協(xié)議書范文3篇
- 二零二五年度企業(yè)年會場地布置用品采購協(xié)議3篇
- 二零二五年度股權(quán)代持風(fēng)險(xiǎn)管理與合作協(xié)議2篇
- 2025年度員工宿舍租賃及智能化安防系統(tǒng)合同3篇
- 2025年度綠色養(yǎng)殖場養(yǎng)殖工人勞動合同3篇
- 2025年度農(nóng)業(yè)機(jī)械出租與農(nóng)機(jī)具維修服務(wù)合同3篇
- 二零二五年度智能交通系統(tǒng)合作項(xiàng)目協(xié)議書模板3篇
- 《業(yè)務(wù)員銷售技巧》課件
- 《汽車涂裝》2024-2025學(xué)年第一學(xué)期工學(xué)一體化課程教學(xué)進(jìn)度計(jì)劃表
- 水廠安全管理培訓(xùn)
- 江西省贛州市2023-2024學(xué)年高一上學(xué)期期末考試化學(xué)試題 附答案
- 消化道出血護(hù)理常規(guī)課件
- 2024年物流運(yùn)輸公司全年安全生產(chǎn)工作計(jì)劃例文(4篇)
- 貴州省銅仁市2023-2024學(xué)年高二上學(xué)期期末質(zhì)量監(jiān)測試題 地理 含答案
- 2024-2025學(xué)年二年級語文上冊期末非紙筆試卷二(統(tǒng)編版)
- 山東師范大學(xué)《古代文學(xué)專題(一)》期末復(fù)習(xí)題
- 注塑操作員作業(yè)指導(dǎo)書
- 片石擋土墻砌筑施工方案及工藝方法
評論
0/150
提交評論