使用大量不同的審計方法來監(jiān)控使用何種權(quán)限,以及訪問哪些對象。審計不會防止使用這些權(quán)限,但可以提供有用的信息,用于揭示權(quán)限的濫用和誤用。下表中總結(jié)了數(shù)據(jù)庫中不同類型的審計。
DBA如何管理系統(tǒng)和對象權(quán)限使用的審計。當(dāng)需要一定的粒度時,DBA可以使用細(xì)粒度的審計來監(jiān)控對表中某些行或列的訪問,而不僅僅是是否訪問表,和審計相關(guān)的主要參數(shù)
SQL>show?parameter?audit
audit_file_dest
audit_sys_operations
audit_trail
:默認(rèn)為false,當(dāng)設(shè)置為true時,所有sys用戶(包括以,身份登錄的用戶)的操作都會被記錄,audit trail不會寫在aud$表中,這個很好理解,如果數(shù)據(jù)庫還未啟動aud$不可用,那么像conn /as 這樣的連接信息,只能記錄在其它地方。如果是平臺oracle表空間的寫權(quán)限,audti trail會記錄在的事件管理中oracle表空間的寫權(quán)限,如果是linux/unix平臺則會記錄在參數(shù)指定的文件中。
:
None:是默認(rèn)值,不做審計;DB:將audit trail 記錄在數(shù)據(jù)庫的審計相關(guān)表中,如aud$,審計的結(jié)果只有連接信息;DB,:這樣審計結(jié)果里面除了連接信息還包含了當(dāng)時執(zhí)行的具體語句;OS:將audit trail 記錄在操作系統(tǒng)文件中,文件名由參數(shù)指定;XML:10g里新增的。注:參數(shù)不是動態(tài)的,為了使參數(shù)中的改動生效,必須關(guān)閉數(shù)據(jù)庫并重新啟動。在對SYS.AUD$表進(jìn)行審計時,應(yīng)該注意監(jiān)控該表的大小,以避免影響SYS表空間中其他對象的空間需求。推薦周期性歸檔SYS.AUD$中的行,并且截取該表。提供了角色 ,和批處理作業(yè)中的特殊賬戶一起使用,用于歸檔和截取審計表。
:=OS時文件位置
SQL>?show?parameter?audit;
NAME?TYPE?VALUE
------------------------------------?-----------?------------------------------
audit_file_dest??????????string???????/oracle/app/oracle/admin/PTBCS/adump
audit_sys_operations????boolean?????FALSE
audit_syslog_level???????string
audit_trail???????????????string???????DB_EXTENDED
audit_sys_operations:審計系統(tǒng)的操作??默認(rèn)為 false,當(dāng)設(shè)置為 true 時,所有 sys(包括以 sysdba,sysopr 身份登錄的用戶)操作都會被記錄,但記錄不會被寫在 aud$表中。如果為 windows 平臺,會記錄在windows事件管理當(dāng)中。
audit_trail:審計追蹤? none 為默認(rèn)值,11G 之后默認(rèn)值為‘db’,如果默認(rèn)值為 none,那么不做審計,說明如下:
DB:將audit?trail記錄在數(shù)據(jù)庫審計相關(guān)的表中,審計只有連接信息?
DB_EXTENDED:這樣審計還包含當(dāng)時的執(zhí)行的具體語句?
OS:將 audit trail 記錄在系統(tǒng)文件中,文件名有audit_file_dest參數(shù)指定
修改語句為:SQL> alter set ='' scope=;
注:參數(shù)不是動態(tài),為了使此參數(shù)中的改動生效,必須關(guān)閉數(shù)據(jù)庫并重新啟動。在對sys.aud$進(jìn)行審計時,還需要監(jiān)控該表的大小,以免影響表空間中其他對象的空間需求。推薦周期性歸檔sys.aud$中的行,并截取該表。目前采用計劃任務(wù),每日刪除上月數(shù)據(jù),只保留當(dāng)月數(shù)據(jù)。
:=os時,文件位置。
每次動作發(fā)生時都對其進(jìn)行審計
SQL>?audit?on?table?by?access;?
SQL> audit on table by session;
只審計一次,默認(rèn)為 by ,有時希望審計成功的動作:沒有生成錯誤消息的語句。對于這些語句,添加 。而有時只關(guān)心使用審計語句的命令是否失敗,失敗原因是權(quán)限違犯、用完表空間中的空間還是語法錯誤。對于這些情況,使用 not 。對于大多數(shù)類別的審計方法,如果確實希望審計所有類型的表訪問或某個用戶的任何權(quán)限,則可以指定all而不是單個的語句類型或?qū)ο蟆K蠥LTER 選項,例如,動態(tài)改變實例參數(shù),切換到下一個日志文件組,以及終止用戶會話
audit alter system ;
CREATE、ALTER、DROP 或 TRUNCATE 集群
audit cluster;
CREATE CONTEXT 或 DROP CONTEXT;
audit context;
或 DROP 數(shù)據(jù)庫鏈接;
audit database link;
、ALTER 或 DROP 維數(shù)
audit dimension;
或 DROP 目錄;
audit directory;
、ALTER 或 DROP 索引
audit index;
、ALTER 或 DROP 物化視圖
audit materialized view;
由于不存在的引用對象而造成的SQL語句的失敗;
SQL> audit not exists;
或 DROP 、、、 BODY 或
audit procedure;
、ALTER 或 DROP 配置文件
audit profile;
audit public database link;
或 DROP 公有數(shù)據(jù)庫鏈接
或 DROP 公有同義詞
audit public synonym;
、ALTER、DROP 或 SET 角色
audit role;
、ALTER 或 DROP 回滾段
audit rollback segment;
或 DROP 序列
audit sequence;
登錄和退出
audit session;
系統(tǒng)權(quán)限的 AUDIT 或
audit system audit;
GRANT 或 系統(tǒng)權(quán)限和角色
audit system grant;
、DROP 或 表
audit table;
、ALTER 或 DROP 表空間
audit tablespace;
、ALTER(啟用/禁用)、DROP觸發(fā)器;具有 ALL 或
ALL 的ALTER TABLE
audit trigger;
、ALTER 和 DROP 類型以及類型主體
audit type;
、ALTER 或 DROP 用戶
audit user;
或 DROP 視圖
audit view;
3.顯式指定的語句類型
任何 ALTER 命令
audit alter sequence;
任何 ALTER TABLE 命令
audit alter table;
添加注釋到表、視圖、物化視圖或它們中的任何列
audit comment table;
刪除表或視圖中的行
SQL> audit delete table;
執(zhí)行程序包中的過程、函數(shù)或任何變量或游標(biāo)
audit execute procedure;
GRANT 或 對象上的權(quán)限
audit grant directory;
GRANT 或 過程、函數(shù)或程序包上的權(quán)限
audit grant procedure;
GRANT 或 序列上的權(quán)限
audit grant sequence;
GRANT或表、視圖或物化視圖上的權(quán)限
audit grant table;
GRANT 或 TYPE 上的權(quán)限
audit grant type;
INTO 表或視圖
audit insert table;
表或視圖上的 LOCK TABLE 命令
audit lock table;
引用序列的或的任何命令
audit select sequence;
FROM 表、視圖或物化視圖
audit select table;
在表或視圖上執(zhí)行
audit update table;
SQL> select username,to_char(timestamp,'MM/DD/YY HH24:MI') timestamp
obj_name,action_name,sql_text
from dba_audit_trail
where username = 'SCOTT';
我用的基本查詢審計信息,顯示結(jié)果如下
scott 08/12/21 17:15 JOB_TITLE_IDX CREATE INDEX create index hr. job_title_idx on hr.jobs(job_title)
1 row selected.
4.權(quán)限審計
審計系統(tǒng)權(quán)限具有與語句審計相同的基本語法,但審計系統(tǒng)權(quán)限是在中,而不是在語句中,指定系統(tǒng)權(quán)限。
audit alter tablespace by access whenever successful;
使用和權(quán)限或者以SYS用戶連接到數(shù)據(jù)庫的系統(tǒng)管理員可以利用特殊的審計,為了啟用這種額外的審計級別,可以設(shè)置初始參數(shù)為TRUE。這種審計記錄發(fā)送到與操作系統(tǒng)審計記錄相同的位置。因此,這個位置是和操作系統(tǒng)相關(guān)的。當(dāng)使用其中一種權(quán)限時執(zhí)行的所有SQL語句,以及作為用戶SYS執(zhí)行的任何SQL語句,都會發(fā)送到操作系統(tǒng)審計位置。
5.模式對象審計
改變表、序列或物化視圖
SQL> audit alter on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;
審計任何對象上的命令
SQL> audit AUDIT on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;
添加注釋到表、視圖或物化視圖
SQL> audit COMMENT on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;
從表、視圖或物化視圖中刪除行
SQL> audit DELETE on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;
執(zhí)行過程、函數(shù)或程序包
SQL> audit EXECUTE on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;
執(zhí)行表或視圖上的閃操作
SQL> audit FLASHBACK on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;
授予任何類型對象上的權(quán)限
SQL> audit GRANT on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;
創(chuàng)建表或物化視圖上的索引
SQL> audit INDEX on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;
將行插入表、視圖或物化視圖中
SQL> audit INSERT on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;
鎖定表、視圖或物化視圖
SQL> audit LOCK on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;
對 對象的內(nèi)容執(zhí)行讀操作
SQL> audit READ on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;
重命名表、視圖或過程
SQL> audit RENAME on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;
從表、視圖、序列或物化視圖中選擇行
SQL> audit SELECT on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;
更新表、視圖或物化視圖
SQL> audit UPDATE on TEST_DR.TEST BY ACCESS WHENEVER SUCCESSFUL;
6.細(xì)粒度審計
稱為FGA,審計變得更為關(guān)注某個方面,并且更為精確。由稱為的PL/SQL 程序包實現(xiàn)FGA。使用標(biāo)準(zhǔn)的審計,可以輕松發(fā)現(xiàn)訪問了哪些對象以及由誰訪問,但無法知道訪問了哪些行或列。細(xì)粒度的審計可解決這個問題,它不僅為需要訪問的行指定謂詞(或 where 子句),還指定了表中訪問的列。通過只在訪問某些行和列時審計對表的訪問,可以極大地減少審計表條目的數(shù)量。例如:用戶通常每天訪問 HR. 表,查找雇員的電子郵件地址。系統(tǒng)管理員懷疑正在查看經(jīng)理們的薪水信息,因此他們建立一個FGA策略,用于審計任何經(jīng)理對列的任何訪問