講解Oracle數(shù)據(jù)庫(kù)提供的多種安全性措施
導(dǎo)讀:Oracle數(shù)據(jù)庫(kù)的安全措施主要有三個(gè)方面,一是用戶標(biāo)識(shí)和鑒定;二是授權(quán)和檢查機(jī)制;三是審計(jì)技術(shù)(是否使用審計(jì)技術(shù)可由用戶靈活選擇);除此之外,Oracle還允許用戶通過(guò)觸發(fā)器靈活定義自己的安全性措施。下文中將會(huì)為大家做更為詳細(xì)的解析。
一、用戶標(biāo)識(shí)和鑒定
在Oracle中,最外層的安全性措施是讓用戶標(biāo)識(shí)自己的名字,然后由系統(tǒng)進(jìn)行核實(shí)。Oracle允許用戶重復(fù)標(biāo)識(shí)三次,如果三次未通過(guò),系統(tǒng)自動(dòng)退出。
二、授權(quán)與檢查機(jī)制
Oracle的權(quán)限包括系統(tǒng)權(quán)限和數(shù)據(jù)庫(kù)對(duì)象的權(quán)限兩類,采用非集中的授權(quán)機(jī)制,即DBA負(fù)責(zé)授予與回收系統(tǒng)權(quán)限,每個(gè)用戶授予與回收自己創(chuàng)建的數(shù)據(jù)庫(kù)對(duì)象的權(quán)限。
Oracle允許重復(fù)授權(quán),即可將某一權(quán)限多次授予同一用戶,系統(tǒng)不會(huì)出錯(cuò)。Oracle也允許無(wú)效回收,即用戶沒(méi)有某種權(quán)限,但回收此權(quán)限的操作仍算成功。
1. 系統(tǒng)權(quán)限
Oracle提供了80多種系統(tǒng)權(quán)限,如創(chuàng)建會(huì)話、創(chuàng)建表、創(chuàng)建視圖、創(chuàng)建用戶等。DBA在創(chuàng)建一個(gè)用戶時(shí)需要將其中的一些權(quán)限授予該用戶。
Oracle支持角色的概念。所謂角色就是一組系統(tǒng)權(quán)限的集合,目的在于簡(jiǎn)化權(quán)限管理。Oracle除允許DBA定義角色外,還提供了預(yù)定義的角色,如CONNECT,RESOURCE和DBA。
具有CONNECT角色的用戶可以登錄數(shù)據(jù)庫(kù),執(zhí)行數(shù)據(jù)查詢和操縱。即可以執(zhí)行ALTER TABLE,CREATE VIEW,CREATE INDEX,DROP TABLE,DROP VIEW,DROP INDEX,GRANT,REVOKE,INSERT,SELECT,UPDATE,DELETE,AUDIT,NOAUDIT等操作。
RESOURCE角色可以創(chuàng)建表,即執(zhí)行CREATE TABLE操作。創(chuàng)建表的用戶將擁有對(duì)該表的所有權(quán)限。
DBA角色可以執(zhí)行某些授權(quán)命令,創(chuàng)建表,對(duì)任何表的數(shù)據(jù)進(jìn)行操縱。它涵蓋了前兩種角色,此外還可以執(zhí)行一些管理操作,DBA角色擁有最高級(jí)別的權(quán)限。
例如DBA建立一用戶U1后,欲將ALTER TABLE,CREATE VIEW,CREATE INDEX,DROP TABLE,DROP VIEW,DROP INDEX,GRANT,REVOKE,INSERT,SELECT,UPDATE,DELETE,AUDIT,NOAUDIT等系統(tǒng)權(quán)限授予U1,則可以只簡(jiǎn)單地將CONNECT角色授予U1即可:
GRANT CONNECT TO U1;
這樣就可以省略十幾條GRANT語(yǔ)句。
2. 數(shù)據(jù)庫(kù)對(duì)象的權(quán)限
在Oracle中,可以授權(quán)的數(shù)據(jù)庫(kù)對(duì)象包括基本表、視圖、序列、同義詞、存儲(chǔ)過(guò)程、函數(shù)等,其中最重要的是基本表。
對(duì)于基本表Oracle支持三個(gè)級(jí)別的安全性:表級(jí)、行級(jí)和列級(jí)。
?。?)表級(jí)安全性
表的創(chuàng)建者或者DBA可以把表級(jí)權(quán)限授予其他用戶,表級(jí)權(quán)限包括:
ALTER:修改表定義
DELETE:刪除表記錄
INDEX:在表上建索引
INSERT:向表中插入數(shù)據(jù)記錄
SELECT:查找表中記錄
UPDATE:修改表中的數(shù)據(jù)
ALL:上述所有權(quán)限
表級(jí)授權(quán)使用GRANT和REVOKE語(yǔ)句。
(2)行級(jí)安全性
Oracle行級(jí)安全性由視圖實(shí)現(xiàn)。用視圖定義表的水平子集,限定用戶在視圖上的操作,就為表的行級(jí)提供了保護(hù)。視圖上的授權(quán)與回收與表級(jí)完全相同。
例如,只允許用戶U2查看Student表中信息系學(xué)生的數(shù)據(jù),則首先創(chuàng)建信息系學(xué)生的視圖S_IS,然后將該視圖的SELECT權(quán)限授予U2用戶。
(3)列級(jí)安全性
Oracle列級(jí)安全性可以由視圖實(shí)現(xiàn),也可以直接在基本表上定義。
用視圖定義表的垂直子集就可以實(shí)現(xiàn)列級(jí)安全性,方法與上面類似。
直接在基本表上定義和回收列級(jí)權(quán)限也是使用GRANT和REVOKE語(yǔ)句。目前Oracle的列級(jí)權(quán)限只有UPDATE,回收列級(jí)UPDATE權(quán)限時(shí),Oracle不允許一列一列地回收,只能回收整個(gè)表的UPDATE權(quán)限。例如,
GRANT UPDATE(Sno,Cno)ON SC TO U2;
把對(duì)SC表中Sno列和Cno列的UPDATE權(quán)限授予U2用戶。
REVOKE UPDATE ON SC FROM U2;
回收了U2用戶對(duì)SC表中Sno列和Cno列的UPDATE權(quán)限。
在Oracle中,表、行、列三級(jí)對(duì)象自上而下構(gòu)成一個(gè)層次結(jié)構(gòu),其中上一級(jí)對(duì)象的權(quán)限制約下一級(jí)對(duì)象的權(quán)限。例如當(dāng)一個(gè)用戶擁有了對(duì)某個(gè)表的UPDATE權(quán)限,即相當(dāng)于在表的所有列都擁有了UPDATE權(quán)限。
Oracle對(duì)數(shù)據(jù)庫(kù)對(duì)象的權(quán)限采用分散控制方式,允許具有WITH GRANT OPTION的用戶把相應(yīng)權(quán)限或其子集傳遞授予其他用戶,但不允許循環(huán)授權(quán),即被授權(quán)者不能把權(quán)限再授回給授權(quán)者或其祖先。
Oracle把所有權(quán)限信息記錄在數(shù)據(jù)字典中,當(dāng)用戶進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),Oracle首先根據(jù)數(shù)據(jù)字典中的權(quán)限信息,檢查操作的合法性。在Oracle中,安全性檢查是任何數(shù)據(jù)庫(kù)操作的第一步。
#p#
三、Oracle的審計(jì)技術(shù)
在Oracle中,審計(jì)分為用戶級(jí)審計(jì)和系統(tǒng)級(jí)審計(jì)。用戶級(jí)審計(jì)是任何Oracle用戶可設(shè)置的審計(jì),主要是用戶針對(duì)自己創(chuàng)建的數(shù)據(jù)庫(kù)表或視圖進(jìn)行審計(jì),記錄所有用戶對(duì)這些表或視圖的一切成功和(或)不成功的訪問(wèn)要求以及各種類型的SQL操作。
系統(tǒng)級(jí)審計(jì)只能由DBA設(shè)置,用以監(jiān)測(cè)成功或失敗的登錄要求、監(jiān)測(cè)GRANT和REVOKE操作以及其他數(shù)據(jù)庫(kù)級(jí)權(quán)限下的操作。
Oracle的審計(jì)功能很靈活,是否使用審計(jì),對(duì)哪些表進(jìn)行審計(jì),對(duì)哪些操作進(jìn)行審計(jì)等都可以由用戶選擇。為此,Oracle提供了AUDIT語(yǔ)句設(shè)置審計(jì)功能,NOAUDIT語(yǔ)句取消審計(jì)功能。設(shè)置審計(jì)時(shí),可以詳細(xì)指定對(duì)哪些SQL操作進(jìn)行審計(jì)。例如,
對(duì)修改SC表結(jié)構(gòu)或數(shù)據(jù)的操作進(jìn)行審計(jì)可使用如下語(yǔ)句:
AUDIE ALTER,UPDATE ON SC;
取消對(duì)SC表的一切審計(jì)可使用如下語(yǔ)句:
NOAUDIT ALL ON SC;
在Oracle中,審計(jì)設(shè)置以及審計(jì)內(nèi)容均存放在數(shù)據(jù)字典中。其中審計(jì)設(shè)置記錄在數(shù)據(jù)字典表SYS.TABLES中,審計(jì)內(nèi)容記錄在數(shù)據(jù)字典表SYS.AUDIT_TRAIL中。
四、用戶定義的安全性措施
除了系統(tǒng)級(jí)的安全性措施外,Oracle還允許用戶用數(shù)據(jù)庫(kù)觸發(fā)器定義特殊的更復(fù)雜的用戶級(jí)安全措施。例如,規(guī)定只能在工作時(shí)間內(nèi)更新Student表,可以定義如下觸發(fā)器,其中sysdate為系統(tǒng)當(dāng)前時(shí)間: CREATE OR REPLACE TRIGGER secure_student
BEFORE INSERT OR UPDATE OR DELETE
ON student
BEGIN
IF (TO_CHAR (SYSDATE, 'DY') IN ('SAT', 'SUN'))
OR (TO_NUMBER (SYSDATE, 'HH24') NOT BETWEEN 8 AND 17)
THEN
raise_application_error
(-20506,
'You may only change data during normal business hours.'
);
END IF;
END;
觸發(fā)器一經(jīng)定義便存放在數(shù)據(jù)字典中。用戶每次對(duì)Student表執(zhí)行INSERT,UPDATE或DELETE操作時(shí)都會(huì)自動(dòng)觸發(fā)該觸發(fā)器,由系統(tǒng)檢查當(dāng)時(shí)的系統(tǒng)時(shí)間,如果是周六或周日,或者不是8點(diǎn)至17點(diǎn),系統(tǒng)會(huì)拒絕執(zhí)行用戶的更新操作,并提示出錯(cuò)信息。
類似的,用戶還可以利用觸發(fā)器進(jìn)一步細(xì)化審計(jì)規(guī)則,使審計(jì)操作的粒度更細(xì)。
綜上所述,Oracle提供了多種安全性措施,提供了多級(jí)安全性檢查,其安全性機(jī)制與操作系統(tǒng)的安全機(jī)制彼此獨(dú)立,數(shù)據(jù)字典在Oracle的安全性授權(quán)和檢查以及審計(jì)技術(shù)中起著重要作用。安全技術(shù)是在不斷更新著,一代比一代技術(shù)更為強(qiáng)大,如果大家有更好的安全維護(hù)方法,隨時(shí)歡迎大家與我分享。
【編輯推薦】