數(shù)據庫的安全性與完整性_第1頁
數(shù)據庫的安全性與完整性_第2頁
數(shù)據庫的安全性與完整性_第3頁
數(shù)據庫的安全性與完整性_第4頁
數(shù)據庫的安全性與完整性_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第七章數(shù)據庫的安全性與完整性

7.1基本概念數(shù)據庫的安全性:是指保護數(shù)據庫以防止不合法的使用所造成的數(shù)據泄露、更改或破壞。數(shù)據庫安全性是一個涵蓋許多問題的廣闊領域。安全性的類型:某些信息的訪問關系到法律和倫理的問題。有些信息可能會認為是屬于個人信息,未授權人員不能對其進行訪問。有關政府、機構或公司層次上的政策問題,這些政策確定哪些信息不應該向公眾公開。與系統(tǒng)有關的問題。系統(tǒng)級上應加強哪幾類安全功能(如:物理硬件級、OS級、DBMS級)一些組織需要把安全性問題劃分為多個安全級別(如:絕密、機密、秘密、公開)。

數(shù)據庫的完整性:是指數(shù)據的正確性、有效性和相容性。7.2數(shù)據庫安全性控制

在一個多用戶數(shù)據庫系統(tǒng)中,DBMS必須提供相應的技術以保證特定的用戶或用戶組,只能訪問數(shù)據庫的指定部分,而不能訪問數(shù)據庫的其他部分。典型的DBMS包含一個數(shù)據庫安全和授權子系統(tǒng),由它來負責實現(xiàn)一個數(shù)據庫的安全性功能以避免發(fā)生未授權的訪問。

DBMS的安全子系統(tǒng)主要包括兩部分:

定義用戶權限:

并將用戶權限登記到數(shù)據字典中。

合法權限檢查:若用戶的操作請求超出了定義的權限,系統(tǒng)將拒絕執(zhí)行此操作。7.2數(shù)據庫安全性控制安全措施應該一級一級層層設置。計算機系統(tǒng)的安全模型:用戶標識和鑒別DB數(shù)據密碼存儲OS安全保護DBMS存取控制7.2數(shù)據庫安全性控制數(shù)據庫安全控制方法一、用戶標識與鑒別1.利用用戶自身具備的各種自然特征標識自己和提供鑒別的依據。2.利用用戶持有的證件。3.利用口令??诹畋C芸刹捎玫囊恍┓椒ǎ海?)擴大口令集和口令長度。(2)規(guī)定口令的生效時間,定期或不定期地更換口令。(3)設置多層口令系統(tǒng)。(4)設置動態(tài)口令。7.2數(shù)據庫安全性控制二、存取控制1.存取控制方法(1)自主存取控制(DAC-DiscretionaryAccessControl

)

這種方法是基于授予和收回權限的機制。它已經發(fā)展成為關系數(shù)據庫系統(tǒng)的主要安全機制。這種機制是一種“all-or-nothing”方法,即一個用戶要么擁有該特權,要么沒有該特權。但是在很多應用中,還需要另外一種安全性策略,這種策略需要在安全性級別的基礎上對數(shù)據或用戶進行分類。

7.2數(shù)據庫安全性控制(2)強制存取控制(MAC-MandatoryAccessControl)

在強制存取控制(MAC)方法中,每一個數(shù)據對象被標以一定的密級,每一個用戶也被授予某一個級別的許可證。對于任意一個對象,只有具有合法許可證的用戶才可以存取。強制存取控制因此相對比較嚴格。

MAC適用于對數(shù)據有嚴格而固定密級分類的部門。主體是指數(shù)據庫中數(shù)據訪問者(用戶、DBA)、進程、線程等,是系統(tǒng)中的活動實體。客體是指數(shù)據庫中數(shù)據及其載體(表、視圖、索引、存儲過程等),是系統(tǒng)中的被動實體。7.2數(shù)據庫安全性控制

對于主體和客體,DBMS為它們每個實例(值)指派一個敏感度標記(Label)。敏感度標記被分成若干級別,例如絕密、機密、秘密、公開等。主體的敏感度標記稱為許可證級別??腕w的敏感度標記稱為密級??腕w子集主體子集訪問7.2數(shù)據庫安全性控制

MAC機制就是通過對比主體的Label和客體的Label,最終確定主體是否能夠存取客體。當某一主體以標記label注冊入系統(tǒng)時,系統(tǒng)要求他對任何客體的存取必須遵循如下規(guī)則:

僅當主體的許可證級別大于或等于客體的密級時,該主體才能讀取相應的客體;

僅當主體的許可證級別小于或等于客體的密級時,該主體才能寫相應的客體。這兩種規(guī)則的共同點在于它們均禁止了擁有高許可證級別的主體更新低密級的數(shù)據對象,從而防止了敏感數(shù)據的泄漏。自主訪問控制與強制訪問控制的比較

自主訪問控制優(yōu)點:有高度的靈活性,這使得它適用于多個應用領域。缺點:防范惡意攻擊的脆弱性。因為一旦被授權用戶訪問以后,自主授權模型就不能對如何傳播和如何使用信息進行任何的控制了。

強制訪問控制優(yōu)點:可以保證更高程度的保護,防止了信息的非法流動。適用于需要高度保護的政府、軍事等應用。缺點:過于嚴格,要求將主體和客體嚴格地劃分到安全級別中,因此僅適用于少數(shù)環(huán)境。7.2數(shù)據庫安全性控制2.自主存取控制的實現(xiàn)(1)用戶分類和權限

用戶:系統(tǒng)用戶(DBA)、數(shù)據對象屬主(owner)、一般用戶、公共用戶(public)。

權限:包括數(shù)據訪問權限(讀、插入、修改、刪除等)和數(shù)據庫模式修改權限(索引、資源、修改、撤消等)兩類。7.2數(shù)據庫安全性控制(2)授權

GRANT語句向用戶授予操作權限。一般格式為:

GRANT{<權限>[,<權限>]…|ALL}ON<對象類型><對象名>TO{<用戶>[,<用戶>]...|PUBLIC}

[WITHGRANTOPTION]

語義為:將對指定操作對象的指定操作權限授予指定的用戶。

ALL:所有權限

PUBLIC:公共用戶對不同類型的操作對象有不同的操作權限。

可將此權限轉授7.2數(shù)據庫安全性控制例:把查詢表SC和修改其學號的權限授給用戶

U2和U4。

GRANTSELECT,

UPDATE(Sno)ONTABLESCTOU2,U4;例:把對表SC的INSERT權限授給用戶U5,并允許將此權限再授予其他用戶。

GRANTINSERTONTABLESCTOU5WITHGRANTOPTION;

U5還可以將此權限授予U6:

GRANTINSERTONTABLESCTOU6;PUBLIC;全體。U6能不能再傳播此權限?7.2數(shù)據庫安全性控制例:

DBA把在數(shù)據庫DB1中建立表的權限授予用戶U1。

GRANTCREATETABONDATABASEDB1TOU1;U1隱含權限?(3)收回權限格式:REVOKE{<權限>[,<權限>]…|ALL}ON<對象類型><對象名>FROM{<用戶>[,<用戶>]...|PUBLIC}[CASCADE|RESTRICT];CASCADE:級聯(lián)(但系統(tǒng)只收回直接或間接從某處獲得的權限)

例:P.215圖7-47.2數(shù)據庫安全性控制(4)數(shù)據庫角色的授權角色:

是權限的集合。數(shù)據庫角色:是一組對數(shù)據庫進行各種操作的權限的集合。將某一組用戶設置為某一角色,他將擁有該角色中的每一個權限。這樣只要對角色進行權限設置便可以實現(xiàn)對所有用戶權限的設置,大大減少了管理員的工作量,簡化了授權的過程。用戶與角色之間存在多對多的聯(lián)系。創(chuàng)建角色必須具有createrole系統(tǒng)權限。7.2數(shù)據庫安全性控制創(chuàng)建角色:

CREATEROLE<角色名>將權限授予角色:

GRANT<權限>[,<權限>]…ON<對象類型><對象名>TO<角色>[,<角色>]...將角色授予用戶:

GRANT<角色>[,<角色>]…TO<角色>[,<用戶>]...[WITHADMINOPTION]可將此權限轉授回收角色的權限:

REVOKE<權限>[,<權限>]…ON<對象類型><對象名>FROM<角色>[,<角色>]...7.2數(shù)據庫安全性控制[例7-7]

CREATEROLEC1;

GRANTSELECT,INSERT

ONTABLEStudentTOC1;

GRANTC1TOU1,U2,U3;

GRANTUPDATE,DELETEONTABLEStudentTOC1;

REVOKEC1FROMU3;REVOKEINSERTONTABLEStudentFROMC1;7.2數(shù)據庫安全性控制三、視圖機制通過視圖機制把要保密的數(shù)據對無權存取的用戶隱藏起來,從而自動地對數(shù)據提供一定程度的安全保護。[例7.8]

創(chuàng)建視圖:CREATEVIEWstudent_maleASSELECT*FROMstudentWHEREsex=‘男’授權1:GRANTSELECT,INSERTONVIEW

student_maleTOU1授權2:GRANTALLPRIVILEGESONVIEW

student_maleTOU37.2數(shù)據庫安全性控制四、數(shù)據加密

是在不安全的環(huán)境中維護數(shù)據安全性的一種方法。加密技術首先使用某個預定的加密密鑰對數(shù)據應用加密算法,然后結果數(shù)據必須要使用解密密鑰進行解密,以恢復原來的數(shù)據。五、審計

審計是對選定的用戶動作的監(jiān)控和記錄,以監(jiān)測可能的不合法行為。審計常用于:(1)審查可疑的活動。(2)監(jiān)視和收集關于數(shù)據庫活動的數(shù)據。7.3數(shù)據庫的完整性控制一、數(shù)據庫的完整性數(shù)據庫的完整性:是指數(shù)據的正確性、有效性和相容性。說明:完整性是為了防止數(shù)據庫中存在不符合語義的數(shù)據,防止錯誤信息的輸入和輸出。

數(shù)據庫完整性約束條件:加在數(shù)據庫數(shù)據之上的語義約束條件。完整性檢查:DBMS中檢查數(shù)據是否滿足完整性條件的機制。

DBMS的完整性控制機制應具有三個方面的功能:(1)定義功能:提供定義完整性約束條件的機制。(2)檢查功能:檢查用戶發(fā)出的操作請求是否違背了完整性約束條件。(3)防范功能:如果發(fā)現(xiàn)用戶的操作請求使數(shù)據違背了完整性約束條件,采取一定的動作來保證數(shù)據的完整性。

7.3數(shù)據庫的完整性控制二、SQL中的完整性約束約束分類列級約束:只能應用在一列上。表級約束:可以應用在一個表中的多列上。當約束用于表級時,應按下列形式設置:

CONSTRAINT<約束名>各種約束形式例:CREATETABLEbook(bidint

NOTNULL,--列級約束

bnamechar(8)NOTNULL,--列級約束

authoridchar(10))7.3數(shù)據庫的完整性控制1、基本表的約束(1)主碼約束主碼能夠惟一地確定表中的每一條記錄,主碼不能取空值。主碼約束可以保證實體的完整性。格式:PRIMARYKEY[(<列名表>)]例:CREATETABLEbook(bidint

PRIMARYKEY,

bnamechar(8)NOTNULL,

authoridchar(10))

7.3數(shù)據庫的完整性控制例:CREATETABLEsc(

snochar(8),

cnochar(4),gradeint,

CONSTRAINTpk_scprimarykey(sno,cno))7.3數(shù)據庫的完整性控制(2)外碼約束外碼約束主要用來維護兩個表之間數(shù)據的一致性,實現(xiàn)表之間的參照完整性。格式:

FOREIGNKEY[(<列名表>)]REFERENCES<目標表>[(<列名表>)][ONDELETE<參照動作>][ONUPDATE<參照動作>]<參照動作>:NOACTION、CASCADE、RESTRICT、SETNULL、SETDEFAULT7.3數(shù)據庫的完整性控制例:CREATETABLEauthors(

authorid

intPRIMARYKEY,

authornamechar(20),addresschar(30))CREATETABLEbook(bidintPRIMARYKEY,

bnamechar(8)NOTNULL,

authorid

int,

CONSTRAINTfk_book

FOREIGNKEY(authorid)REFERENCESauthors(authorid))7.3數(shù)據庫的完整性控制

假定被參照關系稱為父表,參照關系稱為子表。當刪除(DELETE)或修改(UPDATE)父表中的某行時,對子表采取的動作可有下列的選擇:

CASCADE(級聯(lián)):

刪除或修改父表中的行并自動刪除或修改在子表中匹配的行。

RESTRICT(受限):只有當子表外碼中沒有與父表要刪除或修改的主碼相同時,才能刪除父表中的行,否則拒絕執(zhí)行此操作。

SETNULL(置空值):刪除或修改父表中的行并將子表中的外碼設置為NULL。只有當外碼沒有被設置成NOTNULL時才有效。

SETDEFAULT(置默認值):刪除或修改父表中的行并將子表中的外碼設置為指定的默認值。只有外碼指定了默認值時才有效。

NOTACTION:拒絕對父表進行刪除或修改。7.3數(shù)據庫的完整性控制(3)惟一約束惟一約束用于指定一個或多個列的組合值具有惟一性,以防止在列中輸入重復的值。應用場合:每個表中只能有一個主碼,因此當表中已經有一個主碼時,如果還要保證其他的標識符惟一時,就可以使用惟一性約束。例:CREATETABLEstudent(

sno

intPRIMARYKEY,

snamechar(8)NOTNULL,sexchar(2),

cardnochar(18)UNIQUE)7.3數(shù)據庫的完整性控制(4)檢查約束檢查約束對輸入列或者整個表中的值設置檢查條件,以限制輸入值。格式:CHECK(<條件表達式>)

例:CREATETABLEstudent(

sno

intPRIMARYKEY,

snamechar(8)NOTNULL,sexchar(2),

cardnochar(18)UNIQUE,

CONSTRAINTchk_sexcheck(sexin(‘男’,’女’)))7.3數(shù)據庫的完整性控制(5)默認約束默認約束指在插入操作中沒有提供輸入值時,系統(tǒng)自動指定值。例:CREATETABLEstudent(

sno

intPRIMARYKEY,

snamechar(8)NOTNULL,sexchar(2)DEFAULT‘男’

cardnochar(18)UNIQUE,

CONSTRAINTchk_sexcheck(sexin(‘男’,’女’)))7.3數(shù)據庫的完整性控制2、域約束

CREATEDOMAIN<域名><域類型>CHECK(<條件>)[例7.13]CREATEDOMAINGradeCHAR(1)DEFAULT‘?’CONSTRAINTValid_gradeCHECK(VALUEIN(‘A’,’B’,’C’,’D’,’E’,’?’));7.3數(shù)據庫的完整性控制3、斷言

CHECK子句只對定義它的表起作用,對其它表不起作用。[例7.11]對關系SC的定義加入子句:

CHECK(snoIN(SELECTsno

FROMStudent))CHECK(cnoIN(SELECTcno

FROMCourse))

當對表Student中刪除一個元組時,這個操作與關系SC的CHECK無關。

CHECK子句中的條件盡量不要涉及其他關系。7.3數(shù)據庫的完整性控制當約束條件涉及多個表、使用聚集操作時應使用斷言。

格式:CREATEASSERTION<斷言名>CHECK(<條件>)[例7.15]每門課程只允許100個學生選修。

CREATEASSERTIONAsser1CHECK(ALL(SELECTCOUNT(sno)FROMSCGROUPBYcno)<=100);[例7.16]不允許計算機學院的學生選修019號課程。

CREATEASSERTIONAsser2CHECKNOTEXISTS(SELECT*FROMStudent,SCWHEREStudent.sno=SC.snoANDStudent.dept=‘計算機學院’ANDSC.cno=‘019’);7.4觸發(fā)器

觸發(fā)器:是靠事件驅動的特殊過程。觸發(fā)器與存儲過程的區(qū)別:存儲過程通過其他程序的調用來運行,或直接啟動運行,可傳遞參數(shù);而觸發(fā)器的啟動運行必須由一個發(fā)生的事件來激發(fā),它是自動隱式運行的,觸發(fā)器不能接收參數(shù),也不能被調用。觸發(fā)器的類型:

DML觸發(fā)器:它是在執(zhí)行insert、update或delete語句時被激發(fā)執(zhí)行的,它只能定義在表上。

替代觸發(fā)器:是被激發(fā)用以代替執(zhí)行DML語句,它可以定義在表或視圖上。

系統(tǒng)觸發(fā)器:它是在執(zhí)行create、alter或drop語句;執(zhí)行數(shù)據庫的啟動或關閉、用戶的登錄或退出語句時被激發(fā)執(zhí)行的。7.4觸發(fā)器

觸發(fā)器的主要用途:

審計:可記錄登錄數(shù)據庫的用戶。將更新數(shù)據的用戶和時間日期等信息記錄在審計表中。

實現(xiàn)復雜的業(yè)務規(guī)則:如將被刪除的用戶保存在用戶歷史信息中;更新股票表只能在上市交易時間內??蛇M行系統(tǒng)事件的處理:在表中內容發(fā)生變更時,自動通知其他程序采取相應的處理。

增強表的完整性約束:如更新職工的工資時更新后的工資不能低于更新前的工資。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ā)器,當該觸發(fā)器監(jiān)視的表中的元組發(fā)生改變時,就激活觸發(fā)器,每變更一行就觸發(fā)一次。

FOREACHSTATEMENT(默認):為語句級觸發(fā)器。在被監(jiān)控表上執(zhí)行INSERT、DELETE或UPDATE語句,就會激活觸發(fā)器,而不管該語句的執(zhí)行會改變多少元組(即使沒有改變發(fā)生也會激活觸發(fā)器)。該觸發(fā)器就在語句執(zhí)行之前或之后只激發(fā)一次。

REFERENCING:指向更新前或更新后的內容。

BEFORE|AFTER|INSTEADOF:

指定觸發(fā)器執(zhí)行的時機。7.4觸發(fā)器

在行級觸發(fā)器中,REFERENCING的格式:

REFERENCING[OLDAS<舊行別名>][NEWAS<新行別名>]觸發(fā)事件舊行別名新行別名insert無指定update指定指定delete指定無7.4觸發(fā)器

BEFORE觸發(fā)器(前觸發(fā)器)

在觸發(fā)事件之前執(zhí)行。不允許它們修改數(shù)據庫,但可以檢測WHEN子句中定義的前提條件,接受或終止觸發(fā)事件。BEFORE觸發(fā)器的一個典型用途是保持應用指定的數(shù)據完整性。

例:有關系TS(sno,cno,semester,grade)

CL(cno,semester,limit)

創(chuàng)建一個觸發(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ā)事件已經改變數(shù)據庫之后執(zhí)行。[例7.18]

規(guī)定修改SC表的grade值時,修改后的值不能低于修改前的值。

CREATETRIGGERTrig_gradeAFTERUPDATEOFgradeONSCREFERENCINGOLDASoldgNEWASnewgFOREACHROWWHEN(oldg.grade>newg.grade)UPDATESCSETgrade=oldg.gradeWHEREsno=newg.snoANDcno=o;觸發(fā)事件觸發(fā)條件觸發(fā)器動作7.4觸發(fā)器

例:有關系EMP(eno,ename,esex,salary,dno)

創(chuàng)建一個觸發(fā)器,每次工資增長之后將所有雇員新的平均工資記錄到LOG表中。CREATETRIGGERRecordNewAverageAFTERUPDATEOFsalaryONEMPFOREACHSTATEMENTINSERTINTOLOGVALUES(CURRENT_DATE,(SELECTAVG(salary)FROMEMP))

7.4觸發(fā)器

INSTEADOF觸發(fā)器(替換觸發(fā)器)INSTEADOF觸發(fā)器最普遍的應用是對視圖的維護。視圖上的更新事件可以通過觸發(fā)器監(jiā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ā)器

假設在視圖上執(zhí)行下面的操作:

DELETEFROMWorksInWHEREeno=’11111111’

該操作被轉換為該視圖基礎表EMP和DEPT上相應的操作。但是可能會有多種轉換:可以刪除eno為11111111的雇員所在的部門;可以刪除eno為11111111的雇員;可以將雇員元組中的dno字段置為NULL。無法自動決定這三種可能性中哪種是正確的??梢栽O計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)--測試在指定列上進行的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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論