<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鷹翔宇空

    學(xué)習(xí)和生活

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
    原文引自:http://searchdatabase.techtarget.com.cn/tips/421/2142421.shtml

    隨著計(jì)算機(jī)的普及以及網(wǎng)絡(luò)的發(fā)展,數(shù)據(jù)庫已經(jīng)不再僅僅是那些程序員所專有的話題。而Oracle數(shù)據(jù)庫更是憑借其性能卓越,操作方便靈活的特點(diǎn),在數(shù)據(jù)庫的市場(chǎng)中已經(jīng)占據(jù)了一席之地。但是同樣隨著網(wǎng)絡(luò)技術(shù)的不斷進(jìn)步,數(shù)據(jù)信息的不斷增加,數(shù)據(jù)安全已經(jīng)不再是以前的“老生長(zhǎng)談”,也更不是以前書本上那些“可望不可及”的條條框框。

      或許很久以前,大家都覺得Oracle數(shù)據(jù)庫的安全并不存在隱患,因?yàn)镺racle公司在去年11月份開始促銷其數(shù)據(jù)庫軟件時(shí)提出的口號(hào)是“只有Oracle9i能夠做到絕對(duì)安全”。但是不管它這么說是為了促銷,還是為了擴(kuò)大知名度,總之伴去年12 月份,英國(guó)的安全專家 David Litchfield 發(fā)現(xiàn)的9iAS 中存在的程序錯(cuò)誤導(dǎo)致的緩沖溢出漏洞以及后來,PenTest Limited 和 eEye Digital Security 各自提出了一個(gè)小的漏洞,所有使用Oracle公司產(chǎn)品的人都不由地緊張了原本松弛的大腦--這個(gè)對(duì)于用戶來說,畢竟關(guān)系到了自己的“身家性命”。

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

      (一)Oracle數(shù)據(jù)庫的一些基本常識(shí)

      這里僅僅是為了以后的安全奠定一些基礎(chǔ),因?yàn)槲覀兒竺嬉玫剿鼈儭?/p>

      1.Oracle所包含的組件:

      在 Oracle,數(shù)據(jù)庫是指整個(gè) Oracle RDBMS 環(huán)境,它包括以下組件:

      ·Oracle 數(shù)據(jù)庫進(jìn)程和緩沖(實(shí)例)。

      ·SYSTEM 表空間包含一個(gè)集中系統(tǒng)類目,它可以由一個(gè)或多個(gè)數(shù)據(jù)文件構(gòu)成。

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

      ·兩個(gè)以上的聯(lián)機(jī)恢復(fù)日志。

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

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

      每個(gè) Oracle 數(shù)據(jù)庫都在一個(gè)中央系統(tǒng)類目和數(shù)據(jù)字典上運(yùn)行,它位于SYSTEM 表空間。

      2.關(guān)于“日志”

      Oracle數(shù)據(jù)庫使用幾種結(jié)構(gòu)來保護(hù)數(shù)據(jù):數(shù)據(jù)庫后備、日志、回滾段和控制文件。下面我們將大體上了解一下作為主要結(jié)構(gòu)之一的“日志”:

      每一個(gè)Oracle數(shù)據(jù)庫實(shí)例都提供日志,記錄數(shù)據(jù)庫中所作的全部修改。每一個(gè)運(yùn)行的Oracle數(shù)據(jù)庫實(shí)例相應(yīng)地有一個(gè)在線日志,它與Oracle后臺(tái)進(jìn)程LGWR一起工作,立即記錄該實(shí)例所作的全部修改。歸檔(離線)日志是可選擇的,一個(gè)Oracle數(shù)據(jù)庫實(shí)例一旦在線日志填滿后,可形成在線日志歸檔文件。歸檔的在線日志文件被唯一標(biāo)識(shí)并合并成歸檔日志。

      ·關(guān)于在線日志:一個(gè)Oracle數(shù)據(jù)庫的每一實(shí)例有一個(gè)相關(guān)聯(lián)的在線日志。一個(gè)在線日志由多個(gè)在線日志文件組成。在線日志文件(online redo log file)填入日志項(xiàng)(redo entry),日志項(xiàng)記錄的數(shù)據(jù)用于重構(gòu)對(duì)數(shù)據(jù)庫所作的全部修改。

      ·關(guān)于歸檔日志:Oracle要將填滿的在線日志文件組歸檔時(shí),則要建立歸檔日志(archived redo log)。其對(duì)數(shù)據(jù)庫備份和恢復(fù)有下列用處:

      <1>數(shù)據(jù)庫后備以及在線和歸檔日志文件,在操作系統(tǒng)和磁盤故障中可保證全部提交的事物可被恢復(fù)。

      <2>在數(shù)據(jù)庫打開和正常系統(tǒng)使用下,如果歸檔日志是永久保存,在線后備可以進(jìn)行和使用。

      數(shù)據(jù)庫可運(yùn)行在兩種不同方式下:NOARCHIVELOG方式或ARCHIVELOG 方式。數(shù)據(jù)庫在NOARCHIVELOG方式下使用時(shí),不能進(jìn)行在線日志的歸檔。如果數(shù)據(jù)庫在ARCHIVELOG方式下運(yùn)行,可實(shí)施在線日志的歸檔。

      3.物理和邏輯存儲(chǔ)結(jié)構(gòu):

      Oracle RDBMS是由表空間組成的,而表空間又是由數(shù)據(jù)文件組成的。表空間數(shù)據(jù)文件被格式化為內(nèi)部的塊單位。塊的大小,是由DBA在Oracle第一次創(chuàng)建的時(shí)候設(shè)置的,可以在512到8192個(gè)字節(jié)的范圍內(nèi)變動(dòng)。當(dāng)一個(gè)對(duì)象在Oracle表空間中創(chuàng)建的時(shí)候,用戶用叫做長(zhǎng)度的單位(初始長(zhǎng)度((initial extent)、下一個(gè)長(zhǎng)度(next extent)、最小長(zhǎng)度(min extents)、以及最大長(zhǎng)度(max extents))來標(biāo)明該對(duì)象的空間大小。一個(gè)Oracle長(zhǎng)度的大小可以變化,但是要包含一個(gè)由至少五個(gè)連續(xù)的塊構(gòu)成的鏈。

      4.Oracle與Microsoft SQL Server比較下的聯(lián)網(wǎng)協(xié)議:

      (二)Oracle數(shù)據(jù)安全的維護(hù)

      記得某位哲學(xué)家說過:“事物的變化離不開內(nèi)因和外因。”那么對(duì)于Oracle數(shù)據(jù)安全這個(gè)話題而言,也勢(shì)必分為“內(nèi)”和“外”兩個(gè)部分。那么好,我們就先從“內(nèi)”開始說起:

      §1.從Oracle系統(tǒng)本身說起

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

      【一】解決系統(tǒng)本身問題的方法--數(shù)據(jù)庫的備份及恢復(fù)

      ·數(shù)據(jù)庫的備份:

      關(guān)于Oracle數(shù)據(jù)庫的備份,標(biāo)準(zhǔn)地有三中辦法:導(dǎo)出/導(dǎo)入(Export/Import)、冷備份、熱備份。導(dǎo)出備份是一種邏輯備份,冷備份和熱備份是物理備份。

      <1>導(dǎo)出/導(dǎo)入(Export/Import)

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

      a.簡(jiǎn)單導(dǎo)出數(shù)據(jù)(Export)和導(dǎo)入數(shù)據(jù)(Import)

      Oracle支持三種類型的輸出:

      (1)表方式(T方式),將指定表的數(shù)據(jù)導(dǎo)出。

      (2)用戶方式(U方式),將指定用戶的所有對(duì)象及數(shù)據(jù)導(dǎo)出。

      (3)全庫方式(Full方式),將數(shù)據(jù)庫中的所有對(duì)象導(dǎo)出。

      數(shù)據(jù)導(dǎo)出(Import)的過程是數(shù)據(jù)導(dǎo)入(Export)的逆過程,它們的數(shù)據(jù)流向不同。

      b.增量導(dǎo)出/導(dǎo)入

      增量導(dǎo)出是一種常用的數(shù)據(jù)備份方法,它只能對(duì)整個(gè)數(shù)據(jù)庫來實(shí)施,并且必須作為SYSTEM來導(dǎo)出。在進(jìn)行此種導(dǎo)出時(shí),系統(tǒng)不要求回答任何問題。導(dǎo)出文件名缺省為export.dmp,如果不希望自己的輸出文件定名為export.dmp,必須在命令行中指出要用的文件名。

      增量導(dǎo)出包括三個(gè)類型:

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

      即備份整個(gè)數(shù)據(jù)庫,比如:

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

      (2)“增量型”增量導(dǎo)出

      備份上一次備份后改變的數(shù)據(jù)。比如:

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

      (3)“累計(jì)型”增量導(dǎo)出(Cumulative)

      累計(jì)型導(dǎo)出方式只是導(dǎo)出自上次“完全” 導(dǎo)出之后數(shù)據(jù)庫中變化了的信息。比如:

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

      數(shù)據(jù)庫管理員可以排定一個(gè)備份日程表,用數(shù)據(jù)導(dǎo)出的三個(gè)不同方式合理高效地完成。比如數(shù)據(jù)庫的備份任務(wù)可作如下安排:

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

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

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

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

      ·星期五:累計(jì)導(dǎo)出(E)

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

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

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

      第一步:用命令CREATE DATABASE重新生成數(shù)據(jù)庫結(jié)構(gòu);

      第二步:創(chuàng)建一個(gè)足夠大的附加回段。

      第三步:完全增量導(dǎo)入A:

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

      第四步:累計(jì)增量導(dǎo)入E:

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

      第五步:最近增量導(dǎo)入F:

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

      <2>冷備份

      冷備份發(fā)生在數(shù)據(jù)庫已經(jīng)正常關(guān)閉的情況下,當(dāng)正常關(guān)閉時(shí)會(huì)提供給我們一個(gè)完整的數(shù)據(jù)庫。冷備份是將關(guān)鍵性文件拷貝到另外位置的一種說法。對(duì)于備份Oracle信息而言,冷備份是最快和最安全的方法。冷備份的優(yōu)點(diǎn)是:

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

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

      ·容易恢復(fù)到某個(gè)時(shí)間點(diǎn)上(只需將文件再拷貝回去)

      ·能與歸檔方法相結(jié)合,作數(shù)據(jù)庫“最新狀態(tài)”的恢復(fù)。

      ·低度維護(hù),高度安全。

      但冷備份也有如下不足:

      ·單獨(dú)使用時(shí),只能提供到“某一時(shí)間點(diǎn)上”的恢復(fù)。

      ·在實(shí)施備份的全過程中,數(shù)據(jù)庫必須要作備份而不能作其它工作。也就是說,在冷備份過程中,數(shù)據(jù)庫必須是關(guān)閉狀態(tài)。

      ·若磁盤空間有限,只能拷貝到磁帶等其它外部存儲(chǔ)設(shè)備上,速度會(huì)很慢。

      ·不能按表或按用戶恢復(fù)。

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

      ·所有數(shù)據(jù)文件

      ·所有控制文件

      ·所有聯(lián)機(jī)REDO LOG文件

      ·Init.ora文件(可選)

      值得注意的是冷備份必須在數(shù)據(jù)庫關(guān)閉的情況下進(jìn)行,當(dāng)數(shù)據(jù)庫處于打開狀態(tài)時(shí),執(zhí)行數(shù)據(jù)庫文件系統(tǒng)備份是無效的

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

      (1) 關(guān)閉數(shù)據(jù)庫$sqldba lmode=y

      SQLDBA >connect internal;

      SQLDBA >shutdown normal;

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

      SQLDBA >! cp < file > < backup directory >

      (3) 重啟Oracle數(shù)據(jù)庫

      $sqldba lmode=y

      SQLDBA >connect internal;

      SQLDBA >startup;

      <3>熱備份

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

      1.數(shù)據(jù)文件一個(gè)表空間一個(gè)表空間地備份。

      (1)設(shè)置表空間為備份狀態(tài)

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

      (3)恢復(fù)表空間為正常狀態(tài)

      2.備份歸檔log文件。

      (1)臨時(shí)停止歸檔進(jìn)程

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

      (3)重新啟動(dòng)archive進(jìn)程

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

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

      熱備份的優(yōu)點(diǎn)是:

      ·可在表空間或數(shù)據(jù)文件級(jí)備份,備份時(shí)間短。

      ·備份時(shí)數(shù)據(jù)庫仍可使用。

      ·可達(dá)到秒級(jí)恢復(fù)(恢復(fù)到某一時(shí)間點(diǎn)上)。

      ·可對(duì)幾乎所有數(shù)據(jù)庫實(shí)體作恢復(fù)。

      ·恢復(fù)是快速的,在大多數(shù)情況下在數(shù)據(jù)庫仍工作時(shí)恢復(fù)。

      熱備份的不足是:

      ·不能出錯(cuò),否則后果嚴(yán)重。

      ·若熱備份不成功,所得結(jié)果不可用于時(shí)間點(diǎn)的恢復(fù)。

      ·因難于維護(hù),所以要特別仔細(xì)小心,不允許“以失敗而告終”。

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

      在這里,其實(shí)作為一個(gè)差不多點(diǎn)的數(shù)據(jù)庫管理員都很清楚,Oracle數(shù)據(jù)庫本身就使用了很多種手段來加強(qiáng)數(shù)據(jù)庫的安全性,經(jīng)常見到的就有密碼,角色,權(quán)限等等。那么我們就從最簡(jiǎn)單的DBSNMP

      說起:

      Oralce數(shù)據(jù)庫如果采用典型安裝后,自動(dòng)創(chuàng)建了一個(gè)叫做DBSNMP的用戶,該用戶負(fù)責(zé)運(yùn)行Oracle系統(tǒng)的智能代理(Intelligent Agent),該用戶的缺省密碼也是“DBSNMP”。如果忘記修改該用戶的口令,任何人都可以通過該用戶存取數(shù)據(jù)庫系統(tǒng)。現(xiàn)在我們來看一下該用戶具有哪些權(quán)限和角色,然后來分析一下該用戶對(duì)數(shù)據(jù)庫系統(tǒng)可能造成的損失。

      啟動(dòng)SQL/PLUS程序,使用該用戶登錄進(jìn)入:

      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管理用戶,然而,它卻具有兩個(gè)系統(tǒng)級(jí)權(quán)限:UNLIMITED TABLESPACE和CREATE PUBLIC SYNONYM。

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

      可是除了 DBSNMP 還有很多其他的用戶,怎么辦呢?讓我們先看一下目前普遍存在于Oracle數(shù)據(jù)庫中的用戶管理問題:

      (1)權(quán)限過大:對(duì)ORACLE數(shù)據(jù)庫編程和瀏覽的一般用戶常常具有DBA (數(shù)據(jù)庫管理員權(quán)限),

      能對(duì)數(shù)據(jù)庫系統(tǒng)做任何修改或刪除。

      (2)安全性差:很多ORACLE用戶缺省存儲(chǔ)位置都在系統(tǒng)表空間,這樣不僅影響系統(tǒng)的正常工

      作,而且不同用戶的數(shù)據(jù)信息互相影響、透明,保密性差。隨著數(shù)據(jù)的不斷加入,

      有可能使整個(gè)數(shù)據(jù)庫系統(tǒng)崩潰。

      (3)密碼有規(guī)律:在ORACLE調(diào)試初期形成的用戶名和密碼一致的不良習(xí)慣保留到現(xiàn)在;系統(tǒng)用戶SYS和SYSTEM的密碼也眾所皆知。

      知道了這些普遍的“毛病”,我們?cè)趺醋瞿?下面是我的一些建議:

      (1)ORACLE DBA (數(shù)據(jù)庫管理員)的規(guī)范

      ·SUN Solaris操作系統(tǒng)下ORACLE用戶密碼應(yīng)嚴(yán)格保密,絕不該把密碼設(shè)成

      ORACLE;并指定專門的數(shù)據(jù)庫管理員定期修改。

      ·ORACLE初始化建立的SYS和SYSTEM系統(tǒng)管理員用戶密碼應(yīng)由原來MANAGER改成別的不易被記憶的字符串。

      ·ORACLE WEB SERVER的管理端口具備DBA瀏覽數(shù)據(jù)庫的能力,因此其管理者

      ADMIN的密碼也應(yīng)保密,不該把密碼設(shè)成MANAGER;并指定專門的數(shù)據(jù)庫管理員定

      期修改。

      ·ORACLE DBA最好在SUN SPARC服務(wù)器控制臺(tái)上用窗口式界面實(shí)現(xiàn)管理。前提

      是ORACLE用戶啟動(dòng)服務(wù)器,然后在窗口式命令行下輸入SVRMGRM,即啟動(dòng)了ORACLE SERVER MANAGER菜單式管理;用SYSDBA身份登錄后,就可做數(shù)據(jù)庫系統(tǒng)維護(hù)工作了

      (2)SQL*PLUS編程用戶的規(guī)范

      ·存儲(chǔ)結(jié)構(gòu)的規(guī)范

      考慮到用SQL*PLUS編程可實(shí)現(xiàn)各行各業(yè)、各公司、各部門多種多樣的應(yīng)用需求,我們的SQL*PLUS編程用戶也應(yīng)該朝這個(gè)方向規(guī)范:不同種類的應(yīng)用必須有不同的用戶;不同種類的應(yīng)用必須有不同的存儲(chǔ)位置,包括物理文件、缺省表空間、臨時(shí)表空間的創(chuàng)建和規(guī)劃:當(dāng)準(zhǔn)備編寫某一較大規(guī)模(從ORACLE數(shù)據(jù)量和面向用戶量考慮)應(yīng)用程序時(shí),首先應(yīng)該創(chuàng)建一個(gè)邏輯的存儲(chǔ)位置-表空間,同時(shí)定義物理文件的存放路徑和所占硬盤的大小。

      ①、物理文件缺省的存放路徑在/oracle_home/dbs下,在命令行下用UNIX指令df -k 可查看硬盤資源分區(qū)的使用情況。如果oracle_home使用率達(dá)90‰以上,而且有一個(gè)或多個(gè)較為空閑的硬盤資源分區(qū)可以利用,我們最好把物理文件缺省的存放路徑改到較為空閑的硬盤資源分區(qū)路徑下。在此路徑下我們可以這樣規(guī)劃資源物理文件的存儲(chǔ):

      xxx表空間

      xxx行業(yè)/ xxx公司/ xxx 部門/ xxx 服務(wù).dbf

      DEMO表空間

      default_datafile_home1/col /elec/sys4/demo1.dbf

      default_datafile_home1/col /elec/sys4/demo2.dbf

      公司系統(tǒng)四部摹擬演示系統(tǒng)物理文件

      HUMAN表空間

      default_datafile_home1/col/elec/human/human.dbf

      公司人事部人事管理系統(tǒng)物理文件

      BOOK表空間

      default_datafile_home1/col/elec/book/book.dbf

      公司資料室圖書管理系統(tǒng)物理文件

      QUESTION表空間

      default_datafile_home1/col/elec/client/question.dbf

      公司客戶服務(wù)部問題庫系統(tǒng)物理文件

      PC表空間

      default_datafile_home1/col/chaoxun/client/pc.dbf

      公司PC機(jī)售后服務(wù)系統(tǒng)物理文件

      ……表空間

      default_datafile_home2/……………………………

      等等

      說明:其中default_datafile_home1指oracle_home/dbs;

      default_datafile_home2指較為空閑的硬盤資源分區(qū)路徑。

      ②、物理文件的大小根據(jù)應(yīng)用系統(tǒng)的數(shù)據(jù)量、數(shù)據(jù)對(duì)象、程序包的多少來定。一般用于摹擬演示的小系統(tǒng),表空間初始的物理文件為2M即能滿足要求,如果信息量滿,還可以增加物理文件,擴(kuò)充表空間(每次擴(kuò)充大小也可暫定為2M);一般實(shí)際運(yùn)行的應(yīng)用系統(tǒng)可適當(dāng)增加表空間初始的物理文件大小,但也不要一次分配太大(因?yàn)椴灰谆厥湛臻g,卻易擴(kuò)充空間),這也需要根據(jù)具體情況具體分析:信息量大、需長(zhǎng)時(shí)間保存的應(yīng)用在條件允許情況下,表空間可以大到幾百M(fèi)甚至上G;信息量小、短期經(jīng)常刷新的應(yīng)用,表空間可以控制在2M以下。

      ③、表空間的名稱應(yīng)該采用同系統(tǒng)應(yīng)用相似的英文字符或字符縮寫,表空間所對(duì)應(yīng)的一個(gè)或多個(gè)物理文件名也應(yīng)有相關(guān)性。不同用戶所處的缺省表空間不同,存儲(chǔ)的信息就不能互相訪問。這比把所有用戶信息都儲(chǔ)存在系統(tǒng)表空間,安全性大大提高了。如果用ORACLE WEB SERVER管理端口創(chuàng)建的用戶,其缺省和臨時(shí)表空間一定是系統(tǒng)表空間,DBA切記要改變用戶的缺省表空間。臨時(shí)表空間存放臨時(shí)數(shù)據(jù)段,處理一些排序、合并等中間操作,根據(jù)實(shí)際應(yīng)用的需求可以把它們放在專門創(chuàng)建的表空間里;如果系統(tǒng)表空間大,也可以把它們放在系統(tǒng)表空間。用戶創(chuàng)建的數(shù)據(jù)索引最好和數(shù)據(jù)文件分開存放在不同表空間,以減少數(shù)據(jù)爭(zhēng)用和提高響應(yīng)速度。

      ·密碼和用戶名的規(guī)范

      有相當(dāng)數(shù)量的ORACLE用戶名和密碼一致,這是個(gè)很不安全的因素。我們建議ORACLE用戶名和密碼一定不要一樣,密碼最好在五,六位字符以上。不同用戶間不應(yīng)該使用相同的密碼。用戶名的定義可根據(jù)實(shí)際應(yīng)用的英文名來設(shè),而依據(jù)編程人員的姓名定義的用戶名實(shí)際上不規(guī)范,可在日后的工作中結(jié)合上述有關(guān)存儲(chǔ)結(jié)構(gòu)規(guī)范的說明逐步改進(jìn)。

      (3)特殊要求用戶的規(guī)范

      在ORACLE數(shù)據(jù)庫使用過程中,還會(huì)遇到一些有特殊要求的用戶:非編程人員需要對(duì)某個(gè)表有查詢、增加、刪除、修改的權(quán)利。DBA應(yīng)創(chuàng)建一個(gè)這樣的用戶,先確定用戶名和密碼,再規(guī)定相關(guān)應(yīng)用所在缺省表空間(包含某個(gè)表)和臨時(shí)表空間,最后TABLE屬主給其授權(quán):賦予CONNECT角色SELECT、INSERT、DELETE、UPDATE ON THE TABLE的對(duì)象級(jí)權(quán)限,這可根據(jù)實(shí)際需求自由取舍。

      舉例:●給新用戶授于對(duì)象級(jí)權(quán)限(命令行方式):

      假設(shè)新用戶NEW2需要有查詢、刪除、修改DCD用戶的表EMP。

      %svrmgrl

      SVRMGR>connect internal; 以系統(tǒng)管理員登錄

      SVRMGR>create user new2 identified by new2345 default tablespace app;

      SVRMGR>connect dcd/dcdpwd; 以dcd用戶登錄

      SVRMGR>grant connect to new2;

      SVRMGR>grant select on emp to new2;

      SVRMGR>grant delete on emp to new2;

      SVRMGR>grant update on emp to new2;

      說了這么多關(guān)于用戶的問題,那么接下來我們就詳細(xì)得說一下關(guān)于密碼文件的使用以及維護(hù)--在Oracle數(shù)據(jù)庫系統(tǒng)中,用戶如果要以特權(quán)用戶身份(INTERNAL/SYSDBA/SYSOPER)登錄Oracle數(shù)據(jù)庫可以有兩種身份驗(yàn)證的方法:即使用與操作系統(tǒng)集成的身份驗(yàn)證或使用Oracle數(shù)據(jù)庫的密碼文件進(jìn)行身份驗(yàn)證。因此,管理好密碼文件,對(duì)于控制授權(quán)用戶從遠(yuǎn)端或本機(jī)登錄Oracle數(shù)據(jù)庫系統(tǒng),執(zhí)行數(shù)據(jù)庫管理工作,具有重要的意義。

      Oracle數(shù)據(jù)庫的密碼文件存放有超級(jí)用戶INTERNAL/SYS的口令及其他特權(quán)用戶的用戶名/口令,它一般存放在ORACLE_HOME\DATABASE目錄下。

      ·密碼文件的創(chuàng)建:

      在使用Oracle Instance Manager創(chuàng)建一數(shù)據(jù)庫實(shí)例的時(shí)侯,在ORACLE_HOME\DATABASE目錄下還自動(dòng)創(chuàng)建了一個(gè)與之對(duì)應(yīng)的密碼文件,文件名為PWDSID.ORA,其中SID代表相應(yīng)的Oracle數(shù)據(jù)庫系統(tǒng)標(biāo)識(shí)符。此密碼文件是進(jìn)行初始數(shù)據(jù)庫管理工作的基礎(chǔ)。在此之后,管理員也可以根據(jù)需要,使用工具ORAPWD.EXE手工創(chuàng)建密碼文件,命令格式如下:

      C:\ >ORAPWD FILE=< FILENAME > PASSWORD =< PASSWORD > ENTRIES=< MAX_USERS >

      各命令參數(shù)的含義為:

      FILENAME:密碼文件名;

      PASSWORD:設(shè)置INTERNAL/SYS帳號(hào)的口令;

      MAX_USERS:密碼文件中可以存放的最大用戶數(shù),對(duì)應(yīng)于允許以SYSDBA/SYSOPER權(quán)限登錄數(shù)據(jù)庫的最大用戶數(shù)。由于在以后的維護(hù)中,若用戶數(shù)超出了此限制,則需要重建密碼文件,所以此參數(shù)可以根據(jù)需要設(shè)置得大一些。

      有了密碼文件之后,需要設(shè)置初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE來控制密碼文件的使用狀態(tài)。

      ·設(shè)置初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE:

      在Oracle數(shù)據(jù)庫實(shí)例的初始化參數(shù)文件中,此參數(shù)控制著密碼文件的使用及其狀態(tài)。它可以有以下幾個(gè)選項(xiàng):

      NONE:指示Oracle系統(tǒng)不使用密碼文件,特權(quán)用戶的登錄通過操作系統(tǒng)進(jìn)行身份驗(yàn)證;

      EXCLUSIVE:指示只有一個(gè)數(shù)據(jù)庫實(shí)例可以使用此密碼文件。只有在此設(shè)置下的密碼文件可以包含有除INTERNAL/SYS以外的用戶信息,即允許將系統(tǒng)權(quán)限SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用戶。

      SHARED:指示可有多個(gè)數(shù)據(jù)庫實(shí)例可以使用此密碼文件。在此設(shè)置下只有INTERNAL/SYS帳號(hào)能被密碼文件識(shí)別,即使文件中存有其他用戶的信息,也不允許他們以SYSOPER/SYSDBA的權(quán)限登錄。此設(shè)置為缺省值。

      在REMOTE_LOGIN_PASSWORDFILE參數(shù)設(shè)置為EXCLUSIVE、SHARED情況下,Oracle系統(tǒng)搜索密碼文件的次序?yàn)?在系統(tǒng)注冊(cè)庫中查找ORA_SID_PWFILE參數(shù)值(它為密碼文件的全路徑名);若未找到,則查找ORA_PWFILE參數(shù)值;若仍未找到,則使用缺省值ORACLE_HOME\DATABASE\PWDSID.ORA;其中的SID代表相應(yīng)的Oracle數(shù)據(jù)庫系統(tǒng)標(biāo)識(shí)符。

      ·向密碼文件中增加、刪除用戶:

      當(dāng)初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE設(shè)置為EXCLUSIVE時(shí),系統(tǒng)允許除INTERNAL/SYS以外的其他用戶以管理員身份從遠(yuǎn)端或本機(jī)登錄到Oracle數(shù)據(jù)庫系統(tǒng),執(zhí)行數(shù)據(jù)庫管理工作;這些用戶名必須存在于密碼文件中,系統(tǒng)才能識(shí)別他們。由于不管是在創(chuàng)建數(shù)據(jù)庫實(shí)例時(shí)自動(dòng)創(chuàng)建的密碼文件,還是使用工具ORAPWD.EXE手工創(chuàng)建的密碼文件,都只包含INTERNAL/SYS用戶的信息;為此,在實(shí)際操作中,可能需要向密碼文件添加或刪除其他用戶帳號(hào)。

      由于僅被授予SYSOPER/SYSDBA系統(tǒng)權(quán)限的用戶才存在于密碼文件中,所以當(dāng)向某一用戶授予或收回SYSOPER/SYSDBA系統(tǒng)權(quán)限時(shí),他們的帳號(hào)也將相應(yīng)地被加入到密碼文件或從密碼文件中刪除。由此,向密碼文件中增加或刪除某一用戶,實(shí)際上也就是對(duì)某一用戶授予或收回SYSOPER/SYSDBA系統(tǒng)權(quán)限。

      要進(jìn)行此項(xiàng)授權(quán)操作,需使用SYSDBA權(quán)限(或INTERNAL帳號(hào))連入數(shù)據(jù)庫,且初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE的設(shè)置必須為EXCLUSIVE。具體操作步驟如下:

      創(chuàng)建相應(yīng)的密碼文件;

      設(shè)置初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE;

      使用SYSDBA權(quán)限登錄: CONNECT SYS/internal_user_passsword AS SYSDBA;

      啟動(dòng)數(shù)據(jù)庫實(shí)例并打開數(shù)據(jù)庫;

      創(chuàng)建相應(yīng)用戶帳號(hào),對(duì)其授權(quán)(包括SYSOPER和SYSDBA): 授予權(quán)限:GRANT SYSDBA TO user_name;

      收回權(quán)限:REVOKE SYSDBA FROM user_name;

      現(xiàn)在這些用戶可以以管理員身份登錄數(shù)據(jù)庫系統(tǒng)了;

      ·使用密碼文件登錄:

      有了密碼文件后,用戶就可以使用密碼文件以SYSOPER/SYSDBA權(quán)限登錄Oracle數(shù)據(jù)庫實(shí)例了,注意初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE應(yīng)設(shè)置為EXCLUSIVE或SHARED。任何用戶以SYSOPER/SYSDBA的權(quán)限登錄后,將位于SYS用戶的Schema之下,以下為兩個(gè)登錄的例子:

      1. 以管理員身份登錄:

      假設(shè)用戶scott已被授予SYSDBA權(quán)限,則他可以使用以下命令登錄:

      CONNECT scott/tiger AS SYSDBA

      2. 以INTERNAL身份登錄:

      CONNECT INTERNAL/INTERNAL_PASSWORD

      ·密碼文件的維護(hù):

      1. 查看密碼文件中的成員:

      可以通過查詢視圖V$PWFILE_USERS來獲取擁有SYSOPER/SYSDBA系統(tǒng)權(quán)限的用戶的信息,表中SYSOPER/SYSDBA列的取值TRUE/FALSE表示此用戶是否擁有相應(yīng)的權(quán)限。這些用戶也就是相應(yīng)地存在于密碼文件中的成員。

      2. 擴(kuò)展密碼文件的用戶數(shù)量:

      當(dāng)向密碼文件添加的帳號(hào)數(shù)目超過創(chuàng)建密碼文件時(shí)所定的限制(即ORAPWD.EXE工具的MAX_USERS參數(shù))時(shí),為擴(kuò)展密碼文件的用戶數(shù)限制,需重建密碼文件,具體步驟如下:

      a) 查詢視圖V$PWFILE_USERS,記錄下?lián)碛蠸YSOPER/SYSDBA系統(tǒng)權(quán)限的用戶信息;

      關(guān)閉數(shù)據(jù)庫;

      c) 刪除密碼文件;

      d) 用ORAPWD.EXE新建一密碼文件;

      e) 將步驟a中獲取的用戶添加到密碼文件中。

      3. 修改密碼文件的狀態(tài):

      密碼文件的狀態(tài)信息存放于此文件中,當(dāng)它被創(chuàng)建時(shí),它的缺省狀態(tài)為SHARED。可以通過改變初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE的設(shè)置改變密碼文件的狀態(tài)。當(dāng)啟動(dòng)數(shù)據(jù)庫事例時(shí),Oracle系統(tǒng)從初始化參數(shù)文件中讀取REMOTE_LOGIN_PASSWORDFILE參數(shù)的設(shè)置;當(dāng)加載數(shù)據(jù)庫時(shí),系統(tǒng)將此參數(shù)與口令文件的狀態(tài)進(jìn)行比較,如果不同,則更新密碼文件的狀態(tài)。若計(jì)劃允許從多臺(tái)客戶機(jī)上啟動(dòng)數(shù)據(jù)庫實(shí)例,由于各客戶機(jī)上必須有初始化參數(shù)文件,所以應(yīng)確保各客戶機(jī)上的初始化參數(shù)文件的一致性,以避免意外地改變了密碼文件的狀態(tài),造成數(shù)據(jù)庫登陸的失敗。

      4. 修改密碼文件的存儲(chǔ)位置:

      密碼文件的存放位置可以根據(jù)需要進(jìn)行移動(dòng),但作此修改后,應(yīng)相應(yīng)修改系統(tǒng)注冊(cè)庫有關(guān)指向密碼文件存放位置的參數(shù)或環(huán)境變量的設(shè)置。

      5. 刪除密碼文件:

      在刪除密碼文件前,應(yīng)確保當(dāng)前運(yùn)行的各數(shù)據(jù)庫實(shí)例的初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE皆設(shè)置為NONE。在刪除密碼文件后,若想要以管理員身份連入數(shù)據(jù)庫的話,則必須使用操作系統(tǒng)驗(yàn)證的方法進(jìn)行登錄。

      但是管理員都覺得乏味,因?yàn)樵诠芾韱T中流行一種很簡(jiǎn)單的加密辦法--就是經(jīng)常,很頻繁地修改自己的密碼。可是,每次修改都跟打一次仗似的--因?yàn)楦鲁绦虿⒉皇敲總€(gè)人都愿意做的事情。

      那么有沒有什么簡(jiǎn)單點(diǎn)的辦法呢?請(qǐng)往下看:

      模型:Oracle7.3;開發(fā)工具:Develope2000。收費(fèi)系統(tǒng)(在數(shù)據(jù)庫中的名稱是SFYY),其Client端分散在市區(qū)的數(shù)個(gè)營(yíng)業(yè)點(diǎn),通過城域網(wǎng)與主機(jī)(小型 機(jī))相連。

      過程:

      ·在收費(fèi)小型機(jī)Oracle系統(tǒng)的system用戶(DBA)下,創(chuàng)建新用戶test;

      create user test

      identified by carton

      default tablespace dataspace1

      quota 100K

      ·對(duì)test用戶授以權(quán)限;

      grant create session to test;

      grant resource to test;

      ·在test用戶下建立一個(gè)存儲(chǔ)函數(shù)mmtranslate,它其實(shí)是一個(gè)加密程序。下面是一個(gè)簡(jiǎn) 單的例子。

      function mmtranslate(m varchar2)

      return varchar2

      as

      i number(2);

      kk varchar2(10);

      begin

      kk:=′′;

      i:=1;

      loop

      if i<=length(m) then

      if instr(′1234567890′,substr(m,i,1),1,1)>0 then

      kk:=kk||chr(100+to_number(substr(m,i,1)));

      elseif instr(‘wxyz‘,substr(m,i,1),1,1)>0 then

      kk:=kk||chr(-8+ascii(substr(m,i,1)));

      else

      kk:=kk||chr(4+ascii(substr(m,i,1)));

      end if;

      else

      exit;

      end if;

      i:=i+1;

      end loop;

      return kk;

      exception

      when others then

      return ′-1′;

      end;

      ·在test用戶下建表mmtest并插入記錄:

      create table mmtest

      (usnamevarchar2(6),------用戶名稱

      mimavarchar2(6)------加密前的密碼);

      insert into mmtest values( ‘sfyy‘,‘eds2‘);

      commit;

      ·執(zhí)行以下語句

      SQL>select mmtranslate(‘eds2‘) from dual;

      MMTRANSLATE(‘EDS2‘)

      ----------------------------------------

      ihwf

      利用DBA權(quán)限更改sfyy的密碼為上面語句的執(zhí)行結(jié)果:

      alter user sffy

      identified by ihwf; ;

      ·修改應(yīng)用程序,對(duì)于開發(fā)環(huán)境是Develope2000的程序來說,主要是修改主程序的on-lo gon觸發(fā)器:

      declare

      mm varchar2(6);

      begin

      logon(‘test‘,‘carton‘);

      select mima into mm from mmtest where usname=‘sfyy‘;

      mm:=mmtranslate(mm);

      logout;

      logon(‘sfyy‘,mm);

      end;

      然后再利用觸發(fā)器WHEN-NEW-FROM-INSTANCE執(zhí)行Callfrom或Newform等 命令,進(jìn)入業(yè)務(wù)處理程序。這個(gè)主程序應(yīng)當(dāng)僅僅由管理員來掌握,編譯之后將執(zhí)行文件下發(fā) 到各收費(fèi)點(diǎn)的Clien端。

      ·在System用戶下,利用Oracle提供的pupbld.sql,建立表Productuserprofile,執(zhí)行下面這樣的命令,限制在非開發(fā)狀態(tài)Sql命令的使用,例如

      insert into productuserprofile

      (product,userid,attribute,charvalue) values

      (‘SQL*Plus‘,‘TEST‘,‘CONNECT‘,‘DISABLED‘);

      insert into productuserprofile

      (product,userid,attribute,charvalue) values

      (‘SQL*Plus‘,‘SFYY‘,‘DELETE‘,‘DISABLED‘);這樣,在SQL狀態(tài)下,根本無法連接到TEST用戶,而在 sfyy用戶下,delete命令將不能執(zhí)行。當(dāng)然,DBA可以改變這些設(shè)置。

      當(dāng)然了,這個(gè)僅僅是屬于一種“應(yīng)用技巧”,但是足可以把那些每天忙于更新系統(tǒng)的管理員舒服好幾天了。但是另一方面,還要加強(qiáng)對(duì)源程序的管理,在Client端只存放執(zhí)行程序。加強(qiáng)審計(jì),發(fā)現(xiàn)異常現(xiàn)象,及時(shí)處理。這樣才可以做到更高一層的“安全”。

      在下面,我主要是向大家介紹一個(gè)REM對(duì)GHXXB制立數(shù)據(jù)庫觸發(fā)子,密碼的加密程序。

      REM 對(duì)GHXXB制立數(shù)據(jù)庫觸發(fā)子(當(dāng)INSERT OR UPDATE GHXXB時(shí)觸發(fā))

      drop trigger scjmmm;

      create or replace trigger scjmmm

      before insert or update of mm On ghxxb For each Row

      Begin

      :new.mm:=ENCRYPT(:new.mm,:NEW.GH,TO_CHAR(SYSDATE,‘SS‘));

      End;

      /

      ---------------------------密碼的加密程序ENCRYPT----------------------

      Create or Replace

      Function ENCRYPT (Inpass In Varchar2,IN_GH In Varchar2,IN_SS In Varchar2)

      Return Varchar2 Is

      bcs varchar2(20);

      bcs1 number;

      cs number;

      jg number;

      m_gh VARCHAR2(4);

      m_mm VARCHAR2(20);

      Begin

      m_gh:=IN_GH;

      m_mm:=INPASS;

      cs:=TO_NUMBER(IN_SS);

      If cs<=1 then cs:=77 ;end if;

      bcs:=substr(to_char(ascii(substr(m_gh,1,1))),1,2);

      If bcs<‘1‘ then bcs:=‘7‘ ;end if;

      m_gh:=substr(m_gh,2);

      Loop EXIT WHEN nvl(length(m_gh),0)=0 ;

      bcs:=bcs||substr(to_char(ascii(substr(m_gh,1,1))),-1,1);

      m_gh:=substr(m_gh,2);

      End loop;

      Loop EXIT WHEN nvl(length(m_mm),0)=0 ;

      bcs:=bcs||substr(to_char(ascii(substr(m_mm,1,1))),-1,1);

      m_mm:=substr(m_mm,2);

      End loop;

      bcs1:=to_number(bcs);

      jg:=cs*bcs1;

      Loop EXIT WHEN length(to_char(jg))>13;

      jg:=jg*cs ;

      End loop;

      RETURN(IN_SS||substr(to_char(jg),1,14));

      End;

      /

      總結(jié)上面的東西,我們僅僅是從自身做起,知道了怎么維護(hù)Oracle數(shù)據(jù)庫安全這個(gè)話題的“皮毛”。可是,對(duì)于這個(gè)似乎永遠(yuǎn)也說不完的話題,我們光知道怎么從內(nèi)部“防御”就夠了嗎?不要忘了,在外面,還有一群虎視耽耽的“hacker”在盯著你的數(shù)據(jù)庫--因?yàn)檫@里面有他們想要的東西。

      所以,請(qǐng)大家關(guān)注好下一個(gè)話題:

      §2.不被“hacker”入侵的幾個(gè)建議

      我們的目標(biāo)是:沒有蛀牙!(開個(gè)玩笑~!呵呵)其實(shí)應(yīng)該是:它應(yīng)盡可能地堵住潛在的各種漏洞,防止非法用戶利用它們侵入數(shù)據(jù)庫系統(tǒng)。對(duì)于數(shù)據(jù)庫數(shù)據(jù)的安全問題,數(shù)據(jù)庫管理員可以參考有關(guān)系統(tǒng)雙機(jī)熱備份功能以及數(shù)據(jù)庫的備份和恢復(fù)的資料。

      以下就數(shù)據(jù)庫系統(tǒng)不被非法用戶侵入這個(gè)問題作進(jìn)一步的闡述。

      ·組和安全性:在操作系統(tǒng)下建立用戶組也是保證數(shù)據(jù)庫安全性的一種有效方法。Oracle程序?yàn)榱税踩阅康囊话惴譃閮深?一類所有的用戶都可執(zhí)行,另一類只DBA可執(zhí)行。在Unix環(huán)境下組設(shè)置的配置文件是/etc/group,關(guān)于這個(gè)文件如何配置,請(qǐng)參閱Unix的有關(guān)手冊(cè),以下是保證安全性的幾種方法:

      (1)在安裝Oracle Server前,創(chuàng)建數(shù)據(jù)庫管理員組(DBA)而且分配root和Oracle軟件擁有者的用戶ID給這個(gè)組。DBA能執(zhí)行的程序只有710權(quán)限。在安裝過程中SQL*DBA系統(tǒng)權(quán)限命令被自動(dòng)分配給DBA組。

      (2)允許一部分Unix用戶有限制地訪問Oracle服務(wù)器系統(tǒng),增加一個(gè)由授權(quán)用戶組的Oracle組,確保給Oracle服務(wù)器實(shí)用例程Oracle組ID,公用的可執(zhí)行程序,比如SQL*Plus,SQL*forms等,應(yīng)該可被這組執(zhí)行,然后該這個(gè)實(shí)用例程的權(quán)限為710,它將允許同組的用戶執(zhí)行,而其他用戶不能。

      (3)改那些不會(huì)影響數(shù)據(jù)庫安全性的程序的權(quán)限為711。(注:在我們的系統(tǒng)中為了安裝和調(diào)試的方便,Oracle數(shù)據(jù)庫中的兩個(gè)具有DBA權(quán)限的用戶Sys和System的缺省密碼是manager。為了您數(shù)據(jù)庫系統(tǒng)的安全,我們強(qiáng)烈建議您該掉這兩個(gè)用戶的密碼,具體操作如下:

      在SQL*DBA下鍵入:

      alter user sys indentified by password;

      alter user system indentified by password;

      其中password為您為用戶設(shè)置的密碼。

      ·Oracle服務(wù)器實(shí)用例程的安全性:

      以下是保護(hù)Oracle服務(wù)器不被非法用戶使用的幾條建議:

      (1) 確保$ORACLE_HOME/bin目錄下的所有程序的擁有權(quán)歸Oracle軟件擁有者所有;

      (2) 給所有用戶實(shí)用便程(sqiplus,sqiforms,exp,imp等)711權(quán)限,使服務(wù)器上所有的用戶都可訪問Oracle服務(wù)器;

      (3) 給所有的DBA實(shí)用例程(比如SQL*DBA)700權(quán)限。Oracle服務(wù)器和Unix組當(dāng)訪問本地的服務(wù)時(shí),您可以通過在操作系統(tǒng)下把Oracle服務(wù)器的角色映射到Unix的組的方式來使用Unix管理服務(wù)器的安全性,這種方法適應(yīng)于本地訪問。

      在Unix中指定Oracle服務(wù)器角色的格式如下:

      ora_sid_role[_dla]

      其中 sid 是您Oracle數(shù)據(jù)庫的oracle_sid;

      role 是Oracle服務(wù)器中角色的名字;

      d (可選)表示這個(gè)角色是缺省值;a (可選)表示這個(gè)角色帶有WITH ADMIN選項(xiàng),您只可以把這個(gè)角色授予其他角色,不能是其他用戶。

      以下是在/etc/group文件中設(shè)置的例子:

      ora_test_osoper_d:NONE:1:jim,narry,scott

      ora_test_osdba_a:NONE:3:pat

      ora_test_role1:NONE:4:bob,jane,tom,mary,jim

      bin: NONE:5:root,oracle,dba

      root:NONE:7:root

      詞組“ora_test_osoper_d”表示組的名字;詞組“NONE”表示這個(gè)組的密碼;數(shù)字1表示這個(gè)組的ID;接下來的是這個(gè)組的成員。前兩行是Oracle服務(wù)器角色的例子,使用test作為sid,osoper和osdba作為Oracle服務(wù)器角色的名字。osoper是分配給用戶的缺省角色,osdba帶有WITH ADMIN選項(xiàng)。為了使這些數(shù)據(jù)庫角色起作用,您必須shutdown您的數(shù)據(jù)庫系統(tǒng),設(shè)置Oracle數(shù)據(jù)庫參數(shù)文件initORACLE_SID.ora中os_roles參數(shù)為True,然后重新啟動(dòng)您的數(shù)據(jù)庫。如果您想讓這些角色有connect internal權(quán)限,運(yùn)行orapwd為這些角色設(shè)置密碼。當(dāng)您嘗試connect internal時(shí),您鍵入的密碼表示了角色所對(duì)應(yīng)的權(quán)限。

      ·SQL*DBA命令的安全性:

      如果您沒有SQL*PLUS應(yīng)用程序,您也可以使用SQL*DBA作SQL查權(quán)限相關(guān)的命令只能分配給Oracle軟件擁有者和DBA組的用戶,因?yàn)檫@些命令被授予了特殊的系統(tǒng)權(quán)限。

      (1) startup

      (2) shutdown

      (3) connect internal

      ·數(shù)據(jù)庫文件的安全性:

      Oracle軟件的擁有者應(yīng)該這些數(shù)據(jù)庫文件($ORACLE_HOME/dbs/*.dbf)設(shè)置這些文件的使用權(quán)限為0600:文件的擁有者可讀可寫,同組的和其他組的用戶沒有寫的權(quán)限。

      Oracle軟件的擁有者應(yīng)該擁有包含數(shù)據(jù)庫文件的目錄,為了增加安全性,建議收回同組和其他組用戶對(duì)這些文件的可讀權(quán)限。

      ·網(wǎng)絡(luò)安全性:

      當(dāng)處理網(wǎng)絡(luò)安全性時(shí),以下是額外要考慮的幾個(gè)問題。

      (1) 在網(wǎng)絡(luò)上使用密碼在網(wǎng)上的遠(yuǎn)端用戶可以通過加密或不加密方式鍵入密碼,當(dāng)您用不加密方式鍵入密碼時(shí),您的密碼很有可能被非法用戶截獲,導(dǎo)致破壞了系統(tǒng)的安全性。

      (2) 網(wǎng)絡(luò)上的DBA權(quán)限控制您可以通過下列兩種方式對(duì)網(wǎng)絡(luò)上的DBA權(quán)限進(jìn)行控制:

      A 設(shè)置成拒絕遠(yuǎn)程DBA訪問;

      B 通過orapwd給DBA設(shè)置特殊的密碼。

      ·建立安全性策略:

      系統(tǒng)安全性策略

      (1)管理數(shù)據(jù)庫用戶:數(shù)據(jù)庫用戶是訪問Oracle數(shù)據(jù)庫信息的途徑,因此,應(yīng)該很好地維護(hù)管理數(shù)據(jù)庫用戶的安全性。按照數(shù)據(jù)庫系統(tǒng)的大小和管理數(shù)據(jù)庫用戶所需的工作量,數(shù)據(jù)庫安全性管理者可能只是擁有create,alter,或drop數(shù)據(jù)庫用戶的一個(gè)特殊用戶,或者是擁有這些權(quán)限的一組用戶,應(yīng)注意的是,只有那些值得信任的個(gè)人才應(yīng)該有管理數(shù)據(jù)庫用戶的權(quán)限。

      (2) 用戶身份確認(rèn):數(shù)據(jù)庫用戶可以通過操作系統(tǒng),網(wǎng)絡(luò)服務(wù),或數(shù)據(jù)庫進(jìn)行身份確認(rèn),通過主機(jī)操作系統(tǒng)進(jìn)行用戶身份認(rèn)證的優(yōu)點(diǎn)有:

      A 用戶能更快,更方便地聯(lián)入數(shù)據(jù)庫;

      B 通過操作系統(tǒng)對(duì)用戶身份確認(rèn)進(jìn)行集中控制:如果操作系統(tǒng)與數(shù)據(jù)庫用戶信息一致,Oracle無須存儲(chǔ)和管理用戶名以及密碼;

      C 用戶進(jìn)入數(shù)據(jù)庫和操作系統(tǒng)審計(jì)信息一致。

      (3) 操作系統(tǒng)安全性

      A 數(shù)據(jù)庫管理員必須有create和delete文件的操作系統(tǒng)權(quán)限;

      B 一般數(shù)據(jù)庫用戶不應(yīng)該有create或delete與數(shù)據(jù)庫相關(guān)文件的操作系統(tǒng)權(quán)限;

      C 如果操作系統(tǒng)能為數(shù)據(jù)庫用戶分配角色,那么安全性管理者必須有修改操作系統(tǒng)帳戶安全性區(qū)域的操作系統(tǒng)權(quán)限。

      ·數(shù)據(jù)的安全性策略:

      數(shù)據(jù)的生考慮應(yīng)基于數(shù)據(jù)的重要性。如果數(shù)據(jù)不是很重要,那么數(shù)據(jù)的安全性策略可以稍稍放松一些。然而,如果數(shù)據(jù)很重要,那么應(yīng)該有一謹(jǐn)慎的安全性策略,用它來維護(hù)對(duì)數(shù)據(jù)對(duì)象訪問的有效控制。

      ·用戶安全性策略:

      (1) 一般用戶的安全性:

      A 密碼的安全性:如果用戶是通過數(shù)據(jù)庫進(jìn)行用戶身份的確認(rèn),那么建議使用密碼加密的方式與數(shù)據(jù)庫進(jìn)行連接。這種方式的設(shè)置方法如下:

      在客戶端的oracle.ini文件中設(shè)置ora_encrypt_login數(shù)為true;

      在服務(wù)器端的initORACLE_SID.ora文件中設(shè)置dbling_encypt_login參數(shù)為true。

      B 權(quán)限管理:對(duì)于那些用戶很多,應(yīng)用程序和數(shù)據(jù)對(duì)象很豐富的數(shù)據(jù)庫,應(yīng)充分利用“角色”這個(gè)機(jī)制所帶的方便性對(duì)權(quán)限進(jìn)行有效管理。對(duì)于復(fù)雜的系統(tǒng)環(huán)境,“角色”能大大地簡(jiǎn)化權(quán)限的理。

      (2) 終端用戶的安全性:

      您必須針對(duì)終端用戶制定安全性策略。例如,對(duì)于一個(gè)有很多用戶的大規(guī)模數(shù)據(jù)庫,安全性管理者可以決定用戶組分類為這些用戶組創(chuàng)建用戶角色,把所需的權(quán)限和應(yīng)用程序角色授予每一個(gè)用戶角色,以及為用戶分配相應(yīng)的用戶角色。當(dāng)處理特殊的應(yīng)用要求時(shí),安全性管理者也必須明確地把一些特定的權(quán)限要求授予給用戶。您可以使用“角色”對(duì)終端用戶進(jìn)行權(quán)限管理。

      ·數(shù)據(jù)庫管理者安全性策略:

      (1) 保護(hù)作為sys和system用戶的連接:

      當(dāng)數(shù)據(jù)庫創(chuàng)建好以后,立即更改有管理權(quán)限的sys和system用戶的密碼,防止非法用戶訪問數(shù)據(jù)庫。當(dāng)作為sys和system用戶連入數(shù)據(jù)庫后,用戶有強(qiáng)大的權(quán)限用各種方式對(duì)數(shù)據(jù)庫進(jìn)行改動(dòng)。

      (2) 保護(hù)管理者與數(shù)據(jù)庫的連接:

      應(yīng)該只有數(shù)據(jù)庫管理者能用管理權(quán)限連入數(shù)據(jù)庫,當(dāng)以sysdba或startup,shutdown,和recover或數(shù)據(jù)庫對(duì)象(例如create,drop,和delete等)進(jìn)行沒有任何限制的操作。

      (3) 使用角色對(duì)管理者權(quán)限進(jìn)行管理

      ·應(yīng)用程序開發(fā)者的安全性策略:

      (1) 應(yīng)用程序開發(fā)者和他們的權(quán)限數(shù)據(jù)庫應(yīng)用程序開發(fā)者是唯一一類需要特殊權(quán)限組完成自己工作的數(shù)據(jù)庫用戶。開發(fā)者需要諸如create table,create,procedure等系統(tǒng)權(quán)限,然而,為了限制開發(fā)者對(duì)數(shù)據(jù)庫的操作,只應(yīng)該把一些特定的系統(tǒng)權(quán)限授予開發(fā)者。

      (2) 應(yīng)用程序開發(fā)者的環(huán)境:

      A 程序開發(fā)者不應(yīng)與終端用戶競(jìng)爭(zhēng)數(shù)據(jù)庫資源;

      B 用程序開發(fā)者不能損害數(shù)據(jù)庫其他應(yīng)用產(chǎn)品。

      (3) free和controlled應(yīng)用程序開發(fā)應(yīng)用程序開發(fā)者有一下兩種權(quán)限:

      A free development

      應(yīng)用程序開發(fā)者允許創(chuàng)建新的模式對(duì)象,包括table,index,procedure,package等,它允許應(yīng)用程序開發(fā)者開發(fā)獨(dú)立于其他對(duì)象的應(yīng)用程序。

      B controlled development

      應(yīng)用程序開發(fā)者不允許創(chuàng)建新的模式對(duì)象。所有需要table,indes procedure等都由數(shù)據(jù)庫管理者創(chuàng)建,它保證了數(shù)據(jù)庫管理者能完全控制數(shù)據(jù)空間的使用以及訪問數(shù)據(jù)庫信息的途徑。但有時(shí)應(yīng)用程序開發(fā)者也需這兩種權(quán)限的混和。

      (4) 應(yīng)用程序開發(fā)者的角色和權(quán)限數(shù)據(jù)庫安全性管理者能創(chuàng)建角色來管理典型的應(yīng)用程序開發(fā)者的權(quán)限要求。

      A create系統(tǒng)權(quán)限常常授予給應(yīng)用程序開發(fā)者,以至于他們能創(chuàng)建他的數(shù)據(jù)對(duì)象。

      B 數(shù)據(jù)對(duì)象角色幾乎不會(huì)授予給應(yīng)用程序開發(fā)者使用的角色。

      (5) 加強(qiáng)應(yīng)用程序開發(fā)者的空間限制作為數(shù)據(jù)庫安全性管理者,您應(yīng)該特別地為每個(gè)應(yīng)用程序開發(fā)者設(shè)置以下的一些限制:

      A 開發(fā)者可以創(chuàng)建table或index的表空間;

      B 在每一個(gè)表空間中,開發(fā)者所擁有的空間份額。應(yīng)用程序管理者的安全在有許多數(shù)據(jù)庫應(yīng)用程序的數(shù)據(jù)庫系統(tǒng)中,您可能需要一應(yīng)用程序管理者,應(yīng)用程序管理者應(yīng)負(fù)責(zé)起以下的任務(wù):

      a)為每一個(gè)應(yīng)用程序創(chuàng)建角色以及管理每一個(gè)應(yīng)用程序的角色;

      b)創(chuàng)建和管理數(shù)據(jù)庫應(yīng)用程序使用的數(shù)據(jù)對(duì)象;

      c)需要的話,維護(hù)和更新應(yīng)用程序代碼和Oracle的存儲(chǔ)過程和程序包。

      我相信有了以上的這些建議,作為一個(gè)Oracle的管理者絕對(duì)可以做好他本職的工作了。可是,我們?cè)僭趺磁Γ际冀K得面對(duì)這樣一個(gè)現(xiàn)實(shí),那就是Oracle畢竟是其他人開發(fā)的,而我們卻在使用。所以,Oracle到底有多少漏洞--我想這個(gè)不是你和我所能解決的。不過既然作為一篇討論Oracle數(shù)據(jù)安全的文章,我認(rèn)為有必要把漏洞這一塊也寫進(jìn)去,畢竟這也是“安全”必不可少的一部分。呵呵!

      所以……

      【Oracle漏洞舉例】:

      ·Oracle9iAS Web Cache遠(yuǎn)程拒絕服務(wù)攻擊漏洞(2002-10-28)

      ·Oracle 8.1.6的oidldapd中的漏洞

      ·Oracle 9iAS OracleJSP 泄漏JSP文件信息漏洞

      ·Linux ORACLE 8.1.5漏洞

      想必我沒有理由再往下舉了,因?yàn)樽x者肯定已經(jīng)從其他有效的途徑得到了關(guān)于Oracle漏洞的最新情報(bào)。我這里就不再贅述了。

      總而言之一句話--“Oracle數(shù)據(jù)安全是一個(gè)博大而又精深的話題;如果你沒有耐心,就永遠(yuǎn)不會(huì)得到它的精髓之所在。”

    posted on 2006-02-14 17:32 TrampEagle 閱讀(251) 評(píng)論(0)  編輯  收藏 所屬分類: datebase
    主站蜘蛛池模板: 无人在线观看完整免费版视频| 久久影院亚洲一区| 国产在线精品一区免费香蕉| 久久久久久亚洲精品影院| 亚洲级αV无码毛片久久精品| 日本高清免费网站| 午夜宅男在线永久免费观看网| 久久成人免费播放网站| 好吊色永久免费视频大全| 噜噜综合亚洲AV中文无码| 亚洲国产精品久久网午夜| 久久精品国产亚洲AV麻豆王友容 | 亚洲一本综合久久| 在线精品亚洲一区二区三区| 国产又大又粗又硬又长免费 | 亚洲av永久中文无码精品综合| 亚洲国产精品线观看不卡 | 美女被免费喷白浆视频| 欧洲精品99毛片免费高清观看| a毛片免费播放全部完整| caoporn国产精品免费| 免费一级特黄特色大片| 天堂亚洲免费视频| 男女污污污超污视频免费在线看| 老子影院午夜伦不卡亚洲| 日韩欧美亚洲中文乱码| 久久亚洲精品无码gv| 色欲色欲天天天www亚洲伊| 亚洲精品无码不卡在线播放| 亚洲永久网址在线观看| 亚洲日韩亚洲另类激情文学| 亚洲欧美第一成人网站7777 | 日韩插啊免费视频在线观看| 青柠影视在线观看免费| 成全在线观看免费观看大全| 免费一区二区无码东京热| 久久免费国产精品一区二区| 人妻无码久久一区二区三区免费| 99视频有精品视频免费观看| 37pao成人国产永久免费视频| 91免费国产在线观看|