oracle audit and security

lovestanford發表於2014-04-09
建立和實施安全過程有助於保護公司最重要的財富-資料。
建立一個資料庫使用者:
create user thumper
identified by rabbit
default tablespace users
temporary tablespace temp;
授予資源定額
alter user thumper
quota 100M on users;
除了使用者名稱外,create user命令中的全部引數都可以由alter user命令來更改。
撤銷使用者
可以用drop user命令從資料庫中撤銷一個使用者,這個命令只有一個引數-cascade,在撤銷該使用者這前,它撤銷使用者模式中的所有物件。如果使用者擁有物件,就必須指定cascade以撤銷使用者。
drop user thumper cascade;

系統級許可權

可以使用系統級角色分派管理資料庫的系統級命令,可以用grant命令的with grant option子句把想其他使用者授權的能力傳遞給被授予者。

使用者環境檔案

可以使用環境檔案來限制可由使用者使用的系統和資料庫資源並管理口令限制。如果資料庫沒有建立檔案,將使用預設環境檔案:預設環境檔案指定對於所有使用者資源沒有限制。
下面列出了可以透過環境檔案限制的資源
SESSION_PER_USER   在一個例項中,一個使用者可以同時擁有的會話數量
CPU_PER_SESSION    一個會話可以使用的CPU時間,以百分之一秒為單位
CPU_PER_CALL       語法分析,執行或取可以使用的CPU時間,以百分之一秒為                    單位
CONNECT_TIME       一個會話可以連線到一個資料庫的分鐘數
IDLE_TIME          一個會話可以連線到一個資料庫而沒有啟用使用的分鐘數
LOGICAL_READS_PER_SESSION    可以在一個會話中讀取的資料庫塊數
LOGICAL_READS_PER_CALL       在語法分析,執行或獲取期間可以讀取的資料                             庫塊數
PRIVATE_SGA                  在SGA的SQL共享池中,一個會話可以分配的私                             有空間量
COMPOSITE_LIMIT               一個基於前面的限制的複合限制
FAILED_LOGIN_ATTEMPTS        將引起一個帳戶被鎖定的連續註冊失敗的次數
PASSWORD_LIFE_TIME           一個口令在其中止前使用的天數
PASSWORD_REUSE_TIME          一個口令在能夠被重新使用前所必須經過的天                             數
PASSWORD_REUSE_MAX           一個口令在能夠被重新使用之前所必須改變的                               次數
PASSWORD_LOCK_TIME           如果超過FAILED_LOGIN_ATTEMPTS設定值,一個                             帳戶將被鎖定的天數
PASSWORD_GRACE_TIME          以天為單位的“寬限時間”。在寬限期限內,                               在口令達到PASSWORD_LOGIN_TIME設定值時,仍                             能對其修改
PASSWORD_VERIFY_FUNCTION    一個函式名,用於判斷口令的複雜性,由ORACLE                            提供一個口令並可以編輯
環境檔案透過create profile命令建立的。下列所示的alter profile命令用於修改現有的環境檔案。在這個例子中,資料庫的DEFAULT環境檔案被修改成允許最大空閒時間為一小時:
alter profile DEFAULT
limit idle_time 60;

口令管理

oracle8i中,可以使用環境檔案來管理口令的終止,重新使用和複雜性。列如,可以限制一個口令的壽命,鎖定口令過舊的帳戶。也可以強制一個口令至少由一定程度的複雜性並鎖定一個多次註冊失敗的帳戶。
在下面的例子中,建立一個供使用者JANE使用的LIMITED_PROFILE環境檔案:
create profile LIMITED_PROFILE limit
FAILED_LOGIN_ATTEMPTS 5;
create user JANE identified by JANE
profile LIMITED_PROFILE;
grant CREATE SESSION TO JANE;
如果連續5次與JANE帳戶的連線失敗,該帳戶將自動由oracle鎖定。然後當使用JANA帳戶的正確口令時,就會受到一條錯誤資訊:
connect jane/jane
ERROR ora-28000:the account is locked
要對帳戶解鎖,請在資料庫管理員帳戶中使用alter user命令的account unlock子句:
alter user jane account unlock;

使使用者口令過期
alter user jane password expire;
修改使用者口令
alter user jana identified by wang;

資料庫帳戶和主機帳戶相連

當使用者輸入有效的使用者名稱和資料庫的口令後,就允許訪問該資料庫。不過,有可能利用作業系統提供一層附加的使用者驗證。
在同一伺服器中,一個資料庫帳戶可以和一個作業系統帳戶配成對。只是在資料庫帳戶名的字首部分兩個帳戶名有所不同。預設字首為"OPS$"的任意值,但可以透過資料庫init.ora檔案的OS_AUTHENT_PREFIX引數改變成另外的值。

用口令檔案進行驗證

在大多數情況下,DBA使用者可以由作業系統驗證。例如在unix系統上,/etc/group中DBA組的成員可以內部連線。如果DBA使用者不能由作業系統驗證,就要建立儲存一個口令檔案。
要建立一個口令檔案,請進行下面幾步操作:
1)使用ORAPWD使用程式建立口令檔案。
> ORAPWD FILE=filename PASSWORD=password ENTERIES=max_users
ORAPWD是一個生成口令檔案的oracel實用程式。執行ORAPWD時,除了SYS和INTERNAL訪問的口令外,還規定要建立的口令檔案的名 稱。ENTRIES引數通知ORACLE,要在口令檔案中建立多少條目。由於不能在以後擴充套件該檔案,因此要把ENTRIES值設得高一些。如果超出口令文 件條目得範圍限額,就受到一個ORA_1996錯誤。重建該口令檔案時,需要重新授予SYSDBA和SYSOPER許可權。
2)將init.ora檔案中得REMOTE_LOGIN_PASSWORDFILE初始引數設定成EXCLUSIVE,關閉並重新啟動資料庫,以便變更得引數其作用。
3)如下面例子所示,將SYSOPER和SYSDBA許可權授予需要進行資料庫管理得每個使用者。SYSDBA授予使用者資料庫管理員得許可權;SYSOPER使 使用者能執行資料庫操作支援活動。為了授予使用者SYSOPER或SYSDBA許可權,必須在內部連線。被受權使用者現在應能透過使用一個與下數述命令類似得命令 與資料庫連線:
connect george/sdf@prod.world as sysdba
可以用revoke命令撤銷一個使用者得SYSDBA或SYSOPER許可權:
revoke sysdba from george;
若要檢視具有SYSDBA或SYSOPER系統許可權得使用者,可以查詢V$PWFILE_USERS.如果使用者擁有SYSDBA權 限,V$PWFILE_USERS在其SYSDBA列中將有一個TRUE值;如果擁有SYSOPER許可權,將在其sysoper列中有一個TRUE值。


列表使用者許可權

有關已經授予得許可權得資訊儲存在資料字典中。這個資料可以透過資料字典檢視進行訪問。
可以使用下面列出得資料字典檢視來列出資料庫中已授予得許可權。
DBA_ROLES               角色名及其口令狀態
DBA_ROLES_PRIVS                已被授予角色得使用者
DBA_SYS_PRIVS                已被授予系統許可權得使用者
DBA_TAB_PRIVS                已被授予表中許可權得使用者
DBA_COL_PRIVS                已被授予列中許可權得使用者
ROLE_ROLE_PRIVS                已被授給其他使用者得角色
ROLE_SYS_PRIVS                已被授給角色得系統許可權
ROLE_TAB_PRIVS                已被授給角色得表許可權

產看那些系統許可權已被授予哪些角色,下列查詢會顯示這些資訊:
select
      Role   /*name of the role*/
      Privilege  /*system privilege*/
      Admin_Option  /*was admin option granted?*/
from ROLE_SYS_PRIVS;


還有兩個檢視列出了當前會話中啟用得許可權和角色,他們是:
SESSION_PRIVS     privilege列列出了會話中啟用得所有系統許可權,不論是直                  接授予還是透過角色授予
SESSION_ROLES          role列列出了當前會話啟用得所有角色。
SESSION_PRIVS和SESSION_ROLES對所有使用者都是可以得。

限制可用的命令:產品使用者環境檔案

在sql*plus中,提供了一個附加的安全級-對於指定使用者禁止使用各個命令,這樣就可以防止表上有更新許可權的使用者在失控情況下利用sql*plus命名介面更新這個表。
這個效能允許資料庫管理員防止使用者從sql*plus內部訪問作業系統(透過host命令)。當應用程式包含一個訪問sql*plus的選項並且你不想讓使用者訪問作業系統時,這種預防是很有用的。
除了撤銷使用者從sql*PLUS中使用host命令的能力外,也可以撤銷他們使用connect命令的能力。
若要建立這個安全級,必須先建立product user profile表,建立他們的指令碼檔案叫做pupbld.sql,可以在oralce軟體主目錄中找到它。這個指令碼建立一些表和檢視,需要system帳戶中執行。
對於sql*plus,其最重要的表可以透過一個叫PRODUCT_USER_PROFILE的同義詞來訪問。下面列出了用於安全目的的關鍵列。透過向該表中插入記錄來建立所希望的安全級。
也可以使用Product User Profile表來禁止角色。如要禁止一個角色,應將Attribute列設為ROLES,把角色名放入Char_Value列中,禁止角色通常與禁止set命令相結合。
                  PRODUCT_USER_PROFILE中的列
PRODUCT     設定為SQL*PLUS,如果這裡所示,名字必須為混合方式
USERID      被禁止命令的使用者名稱,要求大寫,指定多使用者時可以使用通配府%               ,只使用%則適用於所有使用者
ATTRIBUTE   被禁止的命令名,要求大寫。在SQL*PLUS中禁止set命令也就禁止            了set role 和 set transaction
CHAR_VALUE   用大寫設為DISABLED


登陸期間的口令安全

當從一個客戶機連線到資料庫伺服器,或者透過資料庫連線到另一個資料庫時,除非指定其他形式,否則oralce將以非加密的形式傳輸輸入的口令。對於oracle8可以設定引數來強制oracle在傳輸前將口令加密。若要啟用口令加密,需設定以下引數:
對於客戶機,把sqlnet.ora檔案中的ORA_ENCRYPT_LOGIN引數設定為TRUE.
對於伺服器,把init.ora檔案中的DBLINK_ENCRYPT_LOGIN引數設定為TRUE.
一旦這些引數被設定(並且關閉和重新啟動資料庫),口令將以加密的形式在客戶機到伺服器和伺服器到伺服器之間傳送。


審計

書庫庫具有審計發生在其內部的所有操作的能力。審計記錄可以寫入SYS.AUD$表或作業系統的審計跟蹤中。使用作業系統審計跟蹤的能力依賴於作業系統。
有三種不同的操作型別可以被審計:登陸企圖,物件訪問和資料庫操作。這些型別將在下面幾節分別描述。當執行審計時,資料庫的預設功能記錄下成功和不成功的命令;可以在設定審計型別時對其進行修改。
要允許在一個資料庫中進行審計,資料庫的init.ora檔案必須含有AUDIT_TRAIL引數的條目。AUDIT_TRAIL值為:
NONE     禁止審計
DB       啟用審計,寫入SYS.AUD$        表
OS       啟用審計,寫入作業系統的審計跟蹤(依賴於作業系統)

無論是否設定AUDIT_TRAIL引數,都可以發出以下幾節描述audit命令。除非使用啟用審計的AUDIT_TRAIL值啟動資料庫,否則他們將不被啟用。
如果選擇把審計記錄儲存在SYS.AUD$表中,這個表的記錄就應當定期歸檔,然後表也應被截斷。由於它是在資料字典中,所以改表在SYSTEM表空間 中,如果其記錄不進行定期清理就會引起空間問題。可以給使用者授予DELETE_CATALOG_ROLE許可權,使其能在SYS.AUD$表中進行刪除操 作。

登陸審計

每個連線資料庫的企圖都可以被審計,開始審計登陸企圖的命令為:
audit session;
若只是審計成功或失敗的連線企圖,可以用下列命令之一:
audit session whenever successful;
audit session whenever not successful;
如果審計記錄儲存於SYS.AUD$表中,這時就可以透過DBA_AUDIT_SESSION資料字典檢視來檢視改表。
下面示出得查詢從DBA_AUDIT_SESSION檢視中檢索登陸審計記錄。它列出了使用得作業系統帳戶(OS_USERNAEM),ORACLE帳戶 名(USERNAME)和使用得終端。對RETURNCODE列進行檢查:如果為0,連線成功,否則就檢查兩個常用得錯誤號,確定失敗得原因,登陸和登出 得時間也要顯示。
select
os_username
terminal
from DBA_AUDIT_SESSION;

如果要禁止審計得話,可以使用noaudit命令:
noaudit session;


操作審計

影響資料庫物件得任何操作都可以被審計。影響物件得可能操作(如 create,alter和drop)可以在審計時編成組。這些命令組可以減少建立和維護審計設定值所需管理工作量。
可以審計所有系統級命令並提供命令組。例如,若要審計影響角色得所有命令,可以輸入命令:
audit role;
若要禁止這個設定,可輸入命令:
noaudit role;      

物件審計

除了系統級的物件操作外,還可以審計物件的資料處理操作。這些操作可能包括對錶的選擇,插入,更新和刪除操作。
物件審計附加的子句是by session 或by access子句。這個子句指定一個審計記錄是為每個會話(by session)寫入一次,還是每次訪問物件(by access)時都寫入一次。
例如對EMPLOYEE表的所有insert命令都要進行審計,第二個命令對影響TIME_CARDS表的每個命令都要進行審計。在第三個命令中,對DEPARTMENT表的所有delete操作都要進行審計。
audit insert on THUEPER.EMPOYEE;
audit all on THUMPER.TIME_CARDS;
audit delete on THUMPER.DEPARTMENT by session;
透過對前節所示的DBA_AUDIT_OBJECT檢視進行查詢,就可以看到最終的審計記錄。

保護審計跟蹤

由於資料庫的審計跟蹤表SYS.AUD$是儲存在資料庫中,所以任何寫入這裡的審計記錄都必須得到保護。否則,使用者就可能透過非法操作來刪除其審計跟蹤記錄。
如果審計跟蹤資訊儲存在SYS.AUD$表中,就必須先保護這個表,首先,對這個表的審計操作透過下面明理執行:
audit all on SYS.AUD$ by access;




http://www.itpub.net/thread-178927-1-1.html

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

相關文章