講解Oracle資料庫提供的多種安全性措施 (2)

idba發表於2008-05-10
 

(3)列級安全性

Oracle列級安全性可以由檢視實現,也可以直接在基本表上定義。

用檢視定義表的垂直子集就可以實現列級安全性,方法與上面類似。

直接在基本表上定義和回收列級許可權也是使用GRANT和REVOKE語句。目前Oracle的列級許可權只有UPDATE,回收列級UPDATE許可權時,Oracle不允許一列一列地回收,只能回收整個表的UPDATE許可權。例如,

GRANT UPDATE(Sno,Cno)ON SC TO U2;

把對SC表中Sno列和Cno列的UPDATE許可權授予U2使用者。

REVOKE UPDATE ON SC FROM U2;

回收了U2使用者對SC表中Sno列和Cno列的UPDATE許可權。

在Oracle中,表、行、列三級物件自上而下構成一個層次結構,其中上一級物件的許可權制約下一級物件的許可權。例如當一個使用者擁有了對某個表的UPDATE許可權,即相當於在表的所有列都擁有了UPDATE許可權。

Oracle對資料庫物件的許可權採用分散控制方式,允許具有WITH GRANT OPTION的使用者把相應許可權或其子集傳遞授予其他使用者,但不允許迴圈授權,即被授權者不能把許可權再授回給授權者或其祖先。

Oracle把所有許可權資訊記錄在資料字典中,當使用者進行資料庫操作時,Oracle首先根據資料字典中的許可權資訊,檢查操作的合法性。在Oracle中,安全性檢查是任何資料庫操作的第一步。

三、Oracle的審計技術

在Oracle中,審計分為使用者級審計和系統級審計。使用者級審計是任何Oracle使用者可設定的審計,主要是使用者針對自己建立的資料庫表或檢視進行審計,記錄所有使用者對這些表或檢視的一切成功和(或)不成功的訪問要求以及各種型別的SQL操作。

系統級審計只能由DBA設定,用以監測成功或失敗的登入要求、監測GRANT和REVOKE操作以及其他資料庫級許可權下的操作。

Oracle的審計功能很靈活,是否使用審計,對哪些表進行審計,對哪些操作進行審計等都可以由使用者選擇。為此,Oracle提供了AUDIT語句設定審計功能,NOAUDIT語句取消審計功能。設定審計時,可以詳細指定對哪些SQL操作進行審計。例如,

對修改SC表結構或資料的操作進行審計可使用如下語句:

AUDIE ALTER,UPDATE ON SC;

取消對SC表的一切審計可使用如下語句:

NOAUDIT ALL ON SC;

在Oracle中,審計設定以及審計內容均存放在資料字典中。其中審計設定記錄在資料字典表SYS.TABLES中,審計內容記錄在資料字典表SYS.AUDIT_TRAIL中。

四、使用者定義的安全性措施

除了系統級的安全性措施外,Oracle還允許使用者用資料庫觸發器定義特殊的更復雜的使用者級安全措施。例如,規定只能在工作時間內更新Student表,可以定義如下觸發器,其中sysdate為系統當前時間: 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;

觸發器一經定義便存放在資料字典中。使用者每次對Student表執行INSERT,UPDATE或DELETE操作時都會自動觸發該觸發器,由系統檢查當時的系統時間,如果是週六或週日,或者不是8點至17點,系統會拒絕執行使用者的更新操作,並提示出錯資訊。

類似的,使用者還可以利用觸發器進一步細化審計規則,使審計操作的粒度更細。

綜上所述,Oracle提供了多種安全性措施,提供了多級安全性檢查,其安全性機制與作業系統的安全機制彼此獨立,資料字典在Oracle的安全性授權和檢查以及審計技術中起著重要作用。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1384/viewspace-264867/,如需轉載,請註明出處,否則將追究法律責任。

相關文章