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

Oracle數據庫安全基礎知識

編輯:Oracle數據庫基礎
 隨著計算機的普及以及網絡的發展,數據庫已經不再僅僅是那些程序員所專有的話題。而Oracle數據庫更是憑借其性能卓越,操作方便靈活的特點,在數據庫的市場中已經占據了一席之地。但是同樣隨著網絡技術的不斷進步,數據信息的不斷增加,數據安全已經不再是以前的“老生長談”,也更不是以前書本上那些“可望不可及”的條條框框。

  或許很久以前,大家都覺得Oracle數據庫的安全並不存在隱患,因為Oracle公司在去年11月份開始促銷其數據庫軟件時提出的口號是“只有Oracle9i能夠做到絕對安全”。但是不管它這麼說是為了促銷,還是為了擴大知名度,總之伴去年12 月份,英國的安全專家 David LitchfIEld 發現的9iAS 中存在的程序錯誤導致的緩沖溢出漏洞以及後來,PenTest Limited 和 eEye Digital Security 各自提出了一個小的漏洞,所有使用Oracle公司產品的人都不由地緊張了原本松弛的大腦--這個對於用戶來說,畢竟關系到了自己的“身家性命”。

  下面筆者將帶著大家走進Oracle數據安全的世界。由於筆者水平有限,所以不足之處在所難免,望大家不吝賜教。

  (一)Oracle數據庫的一些基本常識

  這裡僅僅是為了以後的安全奠定一些基礎,因為我們後面要用到它們。

  1.Oracle所包含的組件:

  在 Oracle,數據庫是指整個 Oracle RDBMS 環境,它包括以下組件:

  ·Oracle 數據庫進程和緩沖(實例)。

  ·SYSTEM 表空間包含一個集中系統類目,它可以由一個或多個數據文件構成。

  ·其它由數據庫管理員 (DBA)(可選)定義的表空間,每個都由一個或多個數據文件構成。

  ·兩個以上的聯機恢復日志。

  ·歸檔恢復日志(可選)。

  ·其它文件(控制文件、Init.ora、Config.ora 等)。

  每個 Oracle 數據庫都在一個中央系統類目和數據字典上運行,它位於SYSTEM 表空間。

  2.關於“日志”

  Oracle數據庫使用幾種結構來保護數據:數據庫後備、日志、回滾段和控制文件。下面我們將大體上了解一下作為主要結構之一的“日志”:

  每一個Oracle數據庫實例都提供日志,記錄數據庫中所作的全部修改。每一個運行的Oracle數據庫實例相應地有一個在線日志,它與 Oracle後台進程LGWR一起工作,立即記錄該實例所作的全部修改。歸檔(離線)日志是可選擇的,一個Oracle數據庫實例一旦在線日志填滿後,可形成在線日志歸檔文件。歸檔的在線日志文件被唯一標識並合並成歸檔日志。

  ·關於在線日志:一個Oracle數據庫的每一實例有一個相關聯的在線日志。一個在線日志由多個在線日志文件組成。在線日志文件(online redo log file)填入日志項(redo entry),日志項記錄的數據用於重構對數據庫所作的全部修改。

  ·關於歸檔日志:Oracle要將填滿的在線日志文件組歸檔時,則要建立歸檔日志(archived redo log)。其對數據庫備份和恢復有下列用處:

  <1>數據庫後備以及在線和歸檔日志文件,在操作系統和磁盤故障中可保證全部提交的事物可被恢復。

  <2>在數據庫打開和正常系統使用下,如果歸檔日志是永久保存,在線後備可以進行和使用。

  數據庫可運行在兩種不同方式下:NOARCHIVELOG方式或ARCHIVELOG 方式。數據庫在NOARCHIVELOG方式下使用時,不能進行在線日志的歸檔。如果數據庫在ARCHIVELOG方式下運行,可實施在線日志的歸檔。

  3.物理和邏輯存儲結構:

  Oracle RDBMS是由表空間組成的,而表空間又是由數據文件組成的。表空間數據文件被格式化為內部的塊單位。塊的大小,是由DBA在Oracle第一次創建的時候設置的,可以在512到8192個字節的范圍內變動。當一個對象在Oracle表空間中創建的時候,用戶用叫做長度的單位(初始長度((initial extent)、下一個長度(next extent)、最小長度(min extents)、以及最大長度(max extents))來標明該對象的空間大小。一個Oracle長度的大小可以變化,但是要包含一個由至少五個連續的塊構成的鏈。

  4.Oracle與Microsoft SQL Server比較下的聯網協議:

  (二)Oracle數據安全的維護

  記得某位哲學家說過:“事物的變化離不開內因和外因。”那麼對於Oracle數據安全這個話題而言,也勢必分為“內”和“外”兩個部分。那麼好,我們就先從“內”開始說起:

  §1.從Oracle系統本身說起

  我們先拋開令人聞風色變的“hacker”和其他一些外部的原因,先想一下我們的數據庫。什麼硬盤損壞,什麼軟件受損,什麼操作事物……一系列由於我們的“疏忽”而造成的系統問題就完全可以讓我們辛苦建立的數據庫中的數據一去不復返。那麼,我們就先從自己身上找找原因吧。

  【一】解決系統本身問題的方法--數據庫的備份及恢復

  ·數據庫的備份:

  關於Oracle數據庫的備份,標准地有三中辦法:導出/導入(Export/Import)、冷備份、熱備份。導出備份是一種邏輯備份,冷備份和熱備份是物理備份。

  <1>導出/導入(Export/Import)

  利用Export可將數據從數據庫中提取出來,利用Import則可將提取出來的數據送回Oracle數據庫中去。

  a.簡單導出數據(Export)和導入數據(Import)

  Oracle支持三種類型的輸出:

  (1)表方式(T方式),將指定表的數據導出。

  (2)用戶方式(U方式),將指定用戶的所有對象及數據導出。

  (3)全庫方式(Full方式),將數據庫中的所有對象導出。

  數據導出(Import)的過程是數據導入(Export)的逆過程,它們的數據流向不同。

  b.增量導出/導入

  增量導出是一種常用的數據備份方法,它只能對整個數據庫來實施,並且必須作為SYSTEM來導出。在進行此種導出時,系統不要求回答任何問題。導出文件名缺省為export.dmp,如果不希望自己的輸出文件定名為export.dmp,必須在命令行中指出要用的文件名。

  增量導出包括三個類型:

  (1)“完全”增量導出(Complete)

  即備份整個數據庫,比如:

  $exp system/manager inctype=complete file=990702.dmp

  (2)“增量型”增量導出

  備份上一次備份後改變的數據。比如:

  $exp system/manager inctype=incremental file=990702.dmp

  (3)“累計型”增量導出(Cumulative)

  累計型導出方式只是導出自上次“完全” 導出之後數據庫中變化了的信息。比如:

  $exp system/manager inctype=cumulative file=990702.dmp

  數據庫管理員可以排定一個備份日程表,用數據導出的三個不同方式合理高效地完成。比如數據庫的備份任務可作如下安排:

  ·星期一:完全導出(A)

  ·星期二:增量導出(B)

  ·星期三:增量導出(C)

  ·星期四:增量導出(D)

  ·星期五:累計導出(E)

  ·星期六:增量導出(F)

  ·星期日:增量導出(G)

  如果在星期日,數據庫遭到意外破壞,數據庫管理員可按以下步驟來恢復數據庫:

  第一步:用命令CREATE DATABASE重新生成數據庫結構;

  第二步:創建一個足夠大的附加回段。

  第三步:完全增量導入A:

  $imp system./manager inctype= RECTORE FULL=Y FILE=A

  第四步:累計增量導入E:

  $imp system/manager inctype= RECTORE FULL=Y FILE =E

  第五步:最近增量導入F:

  $imp system/manager inctype=RESTORE FULL=Y FILE=F

  <2>冷備份

  冷備份發生在數據庫已經正常關閉的情況下,當正常關閉時會提供給我們一個完整的數據庫。冷備份是將關鍵性文件拷貝到另外位置的一種說法。對於備份Oracle信息而言,冷備份是最快和最安全的方法。冷備份的優點是:

  ·是非常快速的備份方法(只需拷貝文件)

  ·容易歸檔(簡單拷貝即可)

  ·容易恢復到某個時間點上(只需將文件再拷貝回去)

  ·能與歸檔方法相結合,作數據庫“最新狀態”的恢復。

  ·低度維護,高度安全。

  但冷備份也有如下不足:

  ·單獨使用時,只能提供到“某一時間點上”的恢復。

  ·在實施備份的全過程中,數據庫必須要作備份而不能作其它工作。也就是說,在冷備份過程中,數據庫必須是關閉狀態。

  ·若磁盤空間有限,只能拷貝到磁帶等其它外部存儲設備上,速度會很慢。

  ·不能按表或按用戶恢復。

  如果可能的話(主要看效率),應將信息備份到磁盤上,然後啟動數據庫(使用戶可以工作)並將所備份的信息拷貝到磁帶上(拷貝的同時,數據庫也可以工作)。冷備份中必須拷貝的文件包括:

  ·所有數據文件

  ·所有控制文件

  ·所有聯機REDO LOG文件

  ·Init.ora文件(可選)

  值得注意的是冷備份必須在數據庫關閉的情況下進行,當數據庫處於打開狀態時,執行數據庫文件系統備份是無效的

  下面是做冷備份的完整例子:

  (1) 關閉數據庫$sqldba lmode=y

  SQLDBA >connect internal;

  SQLDBA >shutdown normal;

  (2) 用拷貝命令備份全部的時間文件、重做日志文件、控制文件、初始化參數文件

  SQLDBA >! cp < file > < backup directory >

  (3) 重啟Oracle數據庫

  $sqldba lmode=y

  SQLDBA >connect internal;

  SQLDBA >startup;

  <3>熱備份

  熱備份是在數據庫運行的情況下,采用archivelog mode方式備份數據的方法。所以,如果你有昨天夜裡的一個冷備份而且又有今天的熱備份文件,在發生問題時,就可以利用這些資料恢復更多的信息。熱備份要求數據庫在Archivelog方式下操作,並需要大量的檔案空間。一旦數據庫運行在archivelog狀態下,就可以做備份了。熱備份的命令文件由三部分組成:

  1.數據文件一個表空間一個表空間地備份。

  (1)設置表空間為備份狀態

  (2)備份表空間的數據文件

  (3)恢復表空間為正常狀態

  2.備份歸檔log文件。

  (1)臨時停止歸檔進程

  (2)log下那些在archive redo log目標目錄中的文件

  (3)重新啟動archive進程

  (4)備份歸檔的redo log 文件

  3.用alter database backup controlfile命令來備份拷貝文件

  熱備份的優點是:

  ·可在表空間或數據文件級備份,備份時間短。

  ·備份時數據庫仍可使用。

  ·可達到秒級恢復(恢復到某一時間點上)。

  ·可對幾乎所有數據庫實體作恢復。

  ·恢復是快速的,在大多數情況下在數據庫仍工作時恢復。

  熱備份的不足是:

  ·不能出錯,否則後果嚴重。

  ·若熱備份不成功,所得結果不可用於時間點的恢復。

  ·因難於維護,所以要特別仔細小心,不允許“以失敗而告終”。

  【二】來自內部的另外一個隱患--用戶管理以及密碼問題

  在這裡,其實作為一個差不多點的數據庫管理員都很清楚,Oracle數據庫本身就使用了很多種手段來加強數據庫的安全性,經常見到的就有密碼,角色,權限等等。那麼我們就從最簡單的DBSNMP

  說起:

  Oralce數據庫如果采用典型安裝後,自動創建了一個叫做DBSNMP的用戶,該用戶負責運行Oracle系統的智能代理 (Intelligent Agent),該用戶的缺省密碼也是“DBSNMP”。如果忘記修改該用戶的口令,任何人都可以通過該用戶存取數據庫系統。現在我們來看一下該用戶具有哪些權限和角色,然後來分析一下該用戶對數據庫系統可能造成的損失。

  啟動SQL/PLUS程序,使用該用戶登錄進入:

  SQL> select * from session_privs;

  CREATE SESSION

  ALTER SESSION

  UNLIMITED TABLESPACE

  CREATE TABLE

  CREATE CLUSTER

  CREATE SYNONYM

  CREATE PUBLIC SYNONYM

  CREATE VIEW

  CREATE SEQUENCE

  CREATE DATABASE LINK

  CREATE PROCEDURE

  CREATE TRIGGER

  ANALYZE ANY

  CREATE TYPE

  CREATE OperaTOR

  CREATE INDEXTYPE

  可以看到該用戶不是SYS或SYSTEM管理用戶,然而,它卻具有兩個系統級權限:UNLIMITED TABLESPACE和CREATE PUBLIC SYNONYM。

  看到這兩個權限你應該馬上想到,這些都是安全隱患,尤其是UNLIMITED TABLESPACE,它是破壞數據庫系統的攻擊點之一。如果這時候你還依然認為,即使有人利用這個沒有修改的口令登錄進數據庫也造成不了什麼損失的話,我就不得不提醒你:該用戶具有UNLIMITED TABLESPACE的系統權限,它可以寫一個小的腳本,然後惡意將系統用垃圾數據填滿,這樣數據庫系統也就無法運行,並將直接導致最終的癱瘓。目前很多數據庫系統都要求7X24的工作,如果出現了系統用垃圾數據填滿的情況,那麼,等數據庫系統恢復時,恐怕不可挽回的損失已經造成了。

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