ORALCE 的AUDIT 以及開啟AUDIT對REDO 的影響
關於audit:
1、什麼是審計
簡單來講,就是把對資料庫的操作記錄下來。
不管你是否開啟資料庫的審計功能,以下這些作業系統會強制記錄。
a:用管理員許可權連線Instance
b:啟動資料庫
c:關閉資料庫
記錄的位置由AUDIT_FILE_DEST指定。例如:/home/oracle/admin/orcl/adump。
2、和審計相關的兩個主要引數
Audit_sys_operations
預設為false,當設定為true時,所有(注意是所有!)sys使用者(包括以sysdba,sysoper身份登入的使用者)的操作都會被記錄,若為預設的false,則只記錄start,shutdown ,connect操作。
audit trail不會寫在aud$表中,記錄在檔案系統上,記錄的位置由AUDIT_FILE_DEST指定。例如:/home/oracle/admin/orcl/adump
這個引數可以單獨修改,跟audit_trail沒幹系,只針對sys使用者的修改記錄做審計,若對其他使用者審計,看Audit_trail。
Audit_trail
取值:
none
Disables database auditing.
os
Enables database auditing and directs all audit records to the operating system's audit trail. ---將audit記錄到OS檔案中
db
Enables database auditing and directs all audit records to the database audit trail (the SYS.AUD$ table). ----將audit記錄到aud$表中(不記錄到SQLBIND和SQLTEXT欄位)
db,extended
Enables database auditing and directs all audit records to the database audit trail (the SYS.AUD$ table). In addition, populates the SQLBIND and SQLTEXT CLOB columns of the SYS.AUD$ table.將audit記錄到aud$表中(記錄到SQLBIND和SQLTEXT欄位,即:將操作SQL記錄下來)
xml
Enables database auditing and writes all audit records to XML format OS files.
xml,extended
Enables database auditing and prints all columns of the audit trail, including SqlText and SqlBind values.
注:這兩個引數是static引數,需要重新啟動資料庫才能生效。
3、審計級別
當開啟審計功能後(audit_trail=DB/OS),可在三個級別對資料庫進行審計:Statement(語句) 、Privilege(許可權)、object(物件)
對於語句和許可權審計,生效從執行語句後下一個登陸使用者開始,當前的所有session不受影響。而物件的審計,則從審計語句開始後對當前所有的使用者生效
Statement
按語句來審計,比如audit table 會審計資料庫中所有的create table,drop table,truncate table語句,alter session by cmy會審計cmy使用者所有的資料庫連線。
Privilege
按許可權來審計,當使用者使用了該許可權則被審計,如執行grant select any table to a; audit select any table;語句後,當使用者a 訪問了使用者b的表時(如select * from b.t;)會用到select any table許可權,故會被審計。注意使用者是自己表的所有者,所以使用者訪問自己的表不會被審計
Object
按物件審計,只審計on關鍵字指定物件的相關操作,如aduit alter,delete,drop,insert on cmy.t by scott; 這裡會對cmy使用者的t表進行審計,但同時使用了by子句,所以只會對scott使用者發起的操作進行審計.注意Oracle沒有提供對schema中所有物件的審計功能,只能一個一個物件審計,對於後面建立的物件,Oracle則提供on default子句來實現自動審計,比如執行audit drop on default by access;後, 對於隨後建立的物件的drop操作都會審計。但這個default會對之後建立的所有資料庫物件有效,似乎沒辦法指定只對某個使用者建立的物件有效,想比trigger可以對schema的DDL進行“審計”,這個功能稍顯不足。
4、審計的一些其他選項
by access / by session :by access 每一個被審計的操作都會生成一條audit trail。 by session,一個會話裡面同型別的操作只會生成一條audit trail。 預設為by session
whenever [ not ] successful :whenever successful 操作成功(dba_audit_trail中returncode欄位為0) 才審計,whenever not successful反之。 省略該子句的話,不管操作成功與否都會審計。
5、和審計相關的檢視
dba_audit_trail
儲存所有的audit trail,實際上它只是一個基於aud$的檢視。其它的檢視dba_audit_session,dba_audit_object,dba_audit_statement都只是dba_audit_trail的一個子集。
dba_stmt_audit_opts
可以用來檢視statement審計級別的audit options,即資料庫設定過哪些statement級別的審計。dba_obj_audit_opts,dba_priv_audit_opts檢視功能與之類似
all_def_audit_opts
用來檢視資料庫用on default子句設定了哪些預設物件審計。
6、取消審計
將對應審計語句的audit改為noaudit即可,如audit session whenever successful;取消審計noaudit session whenever successful;
============操作
下面修改audit_sys_operations。 對sys進行審計。
SQL> alter system set audit_sys_operations=true;
alter system set audit_sys_operations=true
*
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified
SQL> alter system set audit_sys_operations=true scope=spfile;
(All audit records for SYS are written to the operating system file that contains the audit trail, and not to SYS.AUD$ (also viewable as DBA_AUDIT_TRAIL))
System altered.
修改audit_sys_operations必須加入scope=spfile.否則報錯。
現在重啟:
SQL> startup force;
ORACLE instance started.
Total System Global Area 209715200 bytes
Fixed Size 1218580 bytes
Variable Size 117442540 bytes
Database Buffers 88080384 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
audit_sys_operations ,修改了這個引數為true,所有sys操作記錄在 ora_30922.aud 中
[oracle@localhost adump]$ more ora_30922.aud
Mon Jun 6 16:45:09 2011
ACTION : 'select * from test'
DATABASE USER: '/'
PRIVILEGE : SYSDBA
CLIENT USER: oracle
CLIENT TERMINAL: pts/4
STATUS: 0
Mon Jun 6 16:47:12 2011
ACTION : 'delete from test'
DATABASE USER: '/'
PRIVILEGE : SYSDBA
CLIENT USER: oracle
CLIENT TERMINAL: pts/4
STATUS: 0
Mon Jun 6 16:47:13 2011
ACTION : 'commit'
DATABASE USER: '/'
PRIVILEGE : SYSDBA
CLIENT USER: oracle
CLIENT TERMINAL: pts/4
STATUS: 0
這時發現會記錄sys所有執行過的命令,而不只是shutdown start connect 這些命令了。
===============
下面修改Audit_trail 對普通使用者進行審計:
SQL> audit all on test.chh by access; ---對test使用者下的chh表的每一次操作都進行審計
Audit succeeded.
SQL> conn test/test;
Connected.
SQL> select * from chh;
no rows selected
SQL> delete from chh;
0 rows deleted.
SQL> select * from dba_audit_trail;
OS_USERNAME USERNAME USERHOST TERMINAL TIMESTAMP OWNER OBJ_NAME ACTION ACTION_NAME NEW_OWNER NEW_NAME OBJ_PRIVILEGE SYS_PRIVILEGE ADMIN_OPTION GRANTEE AUDIT_OPTION SES_ACTIONS LOGOFF_TIME LOGOFF_LREAD LOGOFF_PREAD LOGOFF_LWRITE LOGOFF_DLOCK COMMENT_TEXT SESSIONID ENTRYID STATEMENTID RETURNCODE PRIV_USED CLIENT_ID ECONTEXT_ID SESSION_CPU EXTENDED_TIMESTAMP PROXY_SESSIONID GLOBAL_UID INSTANCE_NUMBER OS_PROCESS TRANSACTIONID SCN SQL_BIND SQL_TEXT
-------------------------------------------------------------------------------- ------------------------------ -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ----------- ------------------------------ -------------------------------------------------------------------------------- ---------- ---------------------------- ------------------------------ -------------------------------------------------------------------------------- ---------------- ---------------------------------------- ------------ ------------------------------ ---------------------------------------- ------------------- ----------- ------------ ------------ ------------- ---------------------------------------- -------------------------------------------------------------------------------- ---------- ---------- ----------- ---------- ---------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ----------- -------------------------------------------------------------------------------- --------------- -------------------------------- --------------- ---------------- ---------------- ---------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
oracle TEST localhost.localdomain pts/4 2011-6-6 17 TEST CHH 3 SELECT 4009 1 7 0 06-6月 -11 05.24.25.835606 下午 +08:00 0 32553 1959247 select * from chh
oracle TEST localhost.localdomain pts/4 2011-6-6 17 TEST CHH 7 DELETE 4009 2 8 0 06-6月 -11 05.24.29.066447 下午 +08:00 0 32553 1959251 delete from chh
已記錄操作。
====修改為xml,把審計資訊以xml形式放到OS上
SQL> alter system set audit_trail=xml scope=spfile;
System altered.
SQL> audit all on test.chh by access;
Audit succeeded.
再次檢視目錄下檔案:
[oracle@localhost adump]$ ls
adx_orcl.txt ora_3215886152.xml ora_3216147500.xml ora_3218050184.xml
發現作業系統目錄下有了審計檔案。
那麼是把審計資訊放到資料庫裡面 還是放到檔案系統中呢?
把審計資訊放到資料庫中,是指放到sys.aud$資料字典表中,它在sytem表空間。放到資料庫中的好處是:
1:可以使用預定義的檢視檢視審計資訊,比如: DBA_AUDIT_TRAIL
2:可以使用ORALCE工具或第三方報表產生審計報表。
缺點是:
1:不安全,DBA可以對審計資料進行修改。
2:萬一資料庫不能對外服務,則審計資訊也不能訪問了。
把審計資訊放到OS檔案系統上
1:更安全,比如可以設定檔案系統目錄dba不能訪問的許可權,使DBA不可修改審計檔案。或者即使資料暫時不能對外服務了,審計檔案也可訪問
2;設定AUDIT_TRAIL=XML,形成的XML審計檔案可更好的與第三方系統互動。
由於把審計資訊放到sys.aud$,修改system表空間,想是否跟資料庫形成資源爭用。
下面驗證 把審計資訊放到資料庫 和 把審計資訊放到OS檔案系統 對redo 的影響:
先驗證第一種:把審計資訊放到資料庫
(注:test.chh 又 crate table test.chh as select * from dba_tables where 1=0 建立)
SQL> alter system set audit_trail=db_extended scope=spfile;
System altered.
SQL> audit all on test.chh by access;
Audit succeeded.
SQL> select value from v$mystat where statistic#=134;
VALUE
----------
672
SQL> insert into chh select * from dba_tables where rownum<2000;
1641 rows created.
SQL> select value from v$mystat where statistic#=134;
VALUE
----------
408296
SQL> commit;
Commit complete.
SQL> select value from v$mystat where statistic#=134;
VALUE
----------
408464
最終產生redo:408464-672=407792
檢視審計表:
SQL> select * from dba_audit_trail;
oracle TEST localhost.localdomain pts/4 2011-6-6 19 TEST CHH 2 INSERT 4048 2 9 0 06-6月 -11 07.52.29.155304 下午 +08:00 0 5020 05001400C9020000 1985640 insert into chh select * from dba_tables where rownum<5000
裡面對應操作的只有一條記錄。
其實 insert into chh select * from dba_tables where rownum<2000 影響的資料快很多,但它只是一條語句而已,所以在審計中是一條記錄。
SQL> alter system set audit_trail=os scope=spfile;
System altered.
SQL> noaudit all on test.chh;
Noaudit succeeded.
SQL> audit all on test.chh by access;
Audit succeeded.
SQL> shutdown immediate;
SQL> startup;
SQL> conn test/test;
Connected.
SQL> select value from v$mystat where statistic#=134;
VALUE
----------
0
SQL> insert into chh select * from dba_tables where rownum<5000;
1641 rows created.
SQL> select value from v$mystat where statistic#=134;
VALUE
----------
388468
SQL> commit;
Commit complete.
SQL> select value from v$mystat where statistic#=134;
VALUE
----------
388636
最終產生:388636-0=388636
與407792相差不多。說明把audit放到sys.aud$字典表與放到OS上,對redo的影響不大。
檢視檔案系統下的審計檔案:
[oracle@localhost adump]$ ls -l -t
總計 24
-rw-r----- 1 oracle oinstall 753 06-06 20:04 ora_5524.aud
-rw-r----- 1 oracle oinstall 762 06-06 20:03 ora_5510.aud
-rw-r----- 1 oracle oinstall 665 06-06 20:03 ora_5482.aud
-rw-r----- 1 oracle oinstall 672 06-06 20:03 ora_5481.aud
-rw-r----- 1 oracle oinstall 1326 06-06 20:03 ora_5454.aud
-rw-r----- 1 oracle oinstall 802 06-06 20:02 ora_5235.aud
[oracle@localhost adump]$ more ora_5524.aud
Audit file /home/oracle/admin/orcl/adump/ora_5524.aud
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /home/oracle/oracle/product/10.2.0/db_1
System name: Linux
Node name: localhost.localdomain
Release: 2.6.18-194.26.1.el5
Version: #1 SMP Tue Nov 9 12:54:40 EST 2010
Machine: i686
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 15
Unix process pid: 5524, image: oracle@localhost.localdomain (TNS V1-V3)
Mon Jun 6 20:04:15 2011
SESSIONID: "4058" ENTRYID: "1" STATEMENT: "8" USERID: "TEST" USERHOST: "localhost.localdomain" TERMINAL: "pts/4" ACTION: "2" RETURNCODE: "0" OBJ$CREATOR: "TEST" OBJ$NAME: "CHH" OS
$USERID: "oracle"
對insert into chh select * from dba_tables where rownum<2000,形成也是一條audit記錄而已。
下面禁用掉審計 看看產生redo的情況:
SQL> alter system set audit_trail=none scope=spfile;
System altered.
SQL> shutdown immediate;
SQL> startup;
SQL> conn test/test;
Connected.
SQL> select value from v$mystat where statistic#=134;
VALUE
----------
624
SQL> insert into chh select * from dba_tables where rownum<5000;
1641 rows created.
SQL> select value from v$mystat where statistic#=134;
VALUE
----------
389212
SQL> commit;
Commit complete.
SQL> select value from v$mystat where statistic#=134;
VALUE
----------
389352
產生REDO:389352-624=388728
發現:
啟用audit,記錄audit到資料庫,產生redo:407792
啟用audit,記錄audit到OS, 產生redo:388636
關閉audit, 產生redo:388728
結論:
開啟審計,把audit放到sys.aud$字典表與放到OS上,對redo的爭用影響不大。前者稍微比後者產生稍微多 的redo。
是否開啟audit對 整個資料庫的redo 影響不大。
=============end=========
轉載於:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1165668/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle開啟audit(審計)Oracle
- Database Audit and Audit trail purgingDatabaseAI
- FN_AUDIT - Name of security audit file
- ORACLE AUDITOracle
- RHEL審計內容/etc/audit/audit.rules
- audit by user by table
- Oracle Audit setupOracle
- audit審計
- oracle audit and securityOracle
- 審計--audit
- mysql-auditMySql
- mysqlalchemy audit extensionMySql
- AUD: Audit Commit Delay exceeded, written a copy to OS Audit TrailMITAI
- oracle10g_audit_solaris_利用audit_sys_operationsOracle
- Script to Show Audit Options/Audit Trail (Doc ID 1019552.6)AI
- react 16.8版本新特性以及對react開發的影響React
- MySQL審計auditMySql
- AUDIT審計(2)
- Oracle 審計 auditOracle
- oracle 審計(Audit)Oracle
- Audit Vault and Database VaultDatabase
- Arraysize的設定以及對查詢效能的影響
- AIX系統中Audit系統的功能和概念,以及相關的命令AI
- SharePoint SC "Audit Settings"功能與CSOM的對應
- Oracle FGA 的使用和cleanup audit trailsOracleAI
- AUDIT審計的一些使用
- Audit 功能的使用方法介紹
- Oracle Audit 功能的使用和說明Oracle
- SQL Server 審計(Audit)SQLServer
- ORACLE AUDIT審計(1)Oracle
- audit_trail與extended!AI
- SAP Security Audit log size
- 關於資料庫開啟大頁對效能的影響資料庫
- Oralce public access 許可權的回收後影響分析
- 物件audit時的一個有用option:ON DEFAULT物件
- 重啟mysql對於auto_increment的影響MySqlREM
- rman開啟備份優化對備份歸檔的影響優化
- fluentd 推送 mariadb audit log