程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 講解Oracle數據庫提供的多種安全性措施

講解Oracle數據庫提供的多種安全性措施

編輯:Oracle數據庫基礎
Oracle的安全措施主要有三個方面,一是用戶標識和鑒定;二是授權和檢查機制;三是審計技術(是否使用審計技術可由用戶靈活選擇);除此之外,Oracle還允許用戶通過觸發器靈活定義自己的安全性措施。

  一、用戶標識和鑒定

  在Oracle中,最外層的安全性措施是讓用戶標識自己的名字,然後由系統進行核實。Oracle允許用戶重復標識三次,如果三次未通過,系統自動退出。

  二、授權與檢查機制

  Oracle的權限包括系統權限和數據庫對象的權限兩類,采用非集中的授權機制,即DBA負責授予與回收系統權限,每個用戶授予與回收自己創建的數據庫對象的權限。

  Oracle允許重復授權,即可將某一權限多次授予同一用戶,系統不會出錯。Oracle也允許無效回收,即用戶沒有某種權限,但回收此權限的操作仍算成功。

  1. 系統權限

  Oracle提供了80多種系統權限,如創建會話、創建表、創建視圖、創建用戶等。DBA在創建一個用戶時需要將其中的一些權限授予該用戶。

  Oracle支持角色的概念。所謂角色就是一組系統權限的集合,目的在於簡化權限管理。Oracle除允許DBA定義角色外,還提供了預定義的角色,如CONNECT,RESOURCE和DBA。

  具有CONNECT角色的用戶可以登錄數據庫,執行數據查詢和操縱。即可以執行ALTER TABLE,CREATE VIEW,CREATE INDEX,DROP TABLE,DROP VIEW,DROP INDEX,GRANT,REVOKE,INSERT,SELECT,UPDATE,DELETE,AUDIT,NOAUDIT等操作。

  RESOURCE角色可以創建表,即執行CREATE TABLE操作。創建表的用戶將擁有對該表的所有權限。

  DBA角色可以執行某些授權命令,創建表,對任何表的數據進行操縱。它涵蓋了前兩種角色,此外還可以執行一些管理操作,DBA角色擁有最高級別的權限。

  例如DBA建立一用戶U1後,欲將ALTER TABLE,CREATE VIEW,CREATE INDEX,DROP TABLE,DROP VIEW,DROP INDEX,GRANT,REVOKE,INSERT,SELECT,UPDATE,DELETE,AUDIT,NOAUDIT等系統權限授予U1,則可以只簡單地將CONNECT角色授予U1即可:

  GRANT CONNECT TO U1;

  這樣就可以省略十幾條GRANT語句。

  2. 數據庫對象的權限

  在Oracle中,可以授權的數據庫對象包括基本表、視圖、序列、同義詞、存儲過程、函數等,其中最重要的是基本表。

  對於基本表Oracle支持三個級別的安全性:表級、行級和列級。

  (1)表級安全性

  表的創建者或者DBA可以把表級權限授予其他用戶,表級權限包括:

  ALTER:修改表定義

  DELETE:刪除表記錄

  INDEX:在表上建索引

  INSERT:向表中插入數據記錄

  SELECT:查找表中記錄

  UPDATE:修改表中的數據

  ALL:上述所有權限

  表級授權使用GRANT和REVOKE語句。

  (2)行級安全性

  Oracle行級安全性由視圖實現。用視圖定義表的水平子集,限定用戶在視圖上的操作,就為表的行級提供了保護。視圖上的授權與回收與表級完全相同。

  例如,只允許用戶U2查看Student表中信息系學生的數據,則首先創建信息系學生的視圖S_IS,然後將該視圖的SELECT權限授予U2用戶。

  (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的安全性授權和檢查以及審計技術中起著重要作用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved