Audit裡審計SQL語句與審計系統許可權的區別

dbhelper發表於2014-12-03

Audit可以實現對於特定物件、特定SQL語句、特定許可權的審計,其中對於SQL語句和系統許可權的審計在概念上有時容易混淆起來,比如拿audit useraudit alter user作比較.

 

audit user是對SQL語句的審計,採用是簡寫的方式,相當於以下三條語句共同作用的結果:

audit alter user ;

audit create user ;

audit drop user;

即會對alter usercreate userdrop user命令進行審計

 

Audit alter user是對alter user許可權的審計,會對需要alter user許可權才能執行的命令進行審計

 

上述兩種方法在alter user操作審計上的區別按照官方文件的說法在於:

Audit user:會記錄使用者修改自己口令的操作,也會記錄使用者修改別人口令的操作

Audit alter user:僅會記錄使用者修改其它使用者口令的操作(因為只有具備了alter user許可權的使用者才能修改其它使用者口令),不記錄使用者修改自己口令的操作(因為使用者修改自己的口令不需要alter user許可權),所以這裡再一次表明這是針對許可權的審計而非語句本身的審計

 

下面做一個簡單的測試來證明一下上面的結論

////////////////////////////////////////////////////

//AUDIT USER功能測試

///////////////////////////////////////////////////

#### MNG使用者不具有alter user許可權,分別對自己和其它使用者的口令進行修改

SQL> show parameter audit_trail

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

audit_trail                          string      XML, EXTENDED

 

--connect as SYS

audit user;

 

--connect as mng

--修改自己口令

alter user mng identified by asdf_1234 replace by old_password;

 

--生成的審計記錄

 

   xmlns:xsi=""

   xsi:schemaLocation="">

   11.2

11230018726111

ryId>2014-09-17T00:59:53.715499ZMNGoracle

r>qc570709b14352420pts/31

e_Number>MNG4303FE00080015F5520

12690575177199617151977

alter user mng identified by ***********replace *

 

--修改其它使用者的口令,返回ORA-01031錯誤,雖然mng使用者沒有alter user許可權但對其它使用者的操作仍會留下印跡,因為audit user後面沒有跟隨whenever successful表明對於成功和失敗兩種情況均進行審計

alter user zd identified by asdf_1234 replace by old_password;

 

--有審計記錄

11230171032122

ryId>2014-09-17T02:58:25.205414ZMNGoracle

r>qc570709b20054834pts/21

e_Number>ZD431031126905885196416

17151977

alter user zd identified by *

 

注:1031表明這條命令沒有正常結束,錯誤的原因是ORA-01031

 

--賦予mng使用者alter user許可權

--connect as SYS

grant alter user to mng;

 

--connect as mng

alter user zd identified by qwer_1234;

 

--語句被審計

 

   xmlns:xsi=""

   xsi:schemaLocation="">

   11.2

112300693991212014-09-17T01:41:15.946112ZMNGoracleqc570709b15860242pts/11ZD4303FE00000015F4EE01269058345177022617151977

alter user zd identified by *

注:0表明這條命令正常結束

 

////////////////////////////////////////////////////

//AUDIT ALTER USER功能測試

///////////////////////////////////////////////////

####關閉之前開啟的所有審計,測試使用者在不具備alter user許可權,具備alter user許可權這兩種情況下的審計行為

 

--connect SYS

noaudit user;

revoke alter user from mng;

audit alter user;

 

--connect mng,修改自己和其它使用者的口令都沒有生成審計檔案

alter user mng identified by yuhj_1234 replace mnbv_1234;

alter user zd identified by qwer_1234 replace fghf_1234;

 

--connect SYS

grant alter user to mng;

 

--connect mng,修改自己的口令也會被審計,這個和官方的結論稍有差異

alter user mng identified by knmf_5678 replace yuhj_1234;

alter user zd identified by knmf_5678;

 

--記錄下來的審計資訊

**修改自己口令的審計

11230106712133

ryId>2014-09-17T02:09:49.074621ZMNGoracle

r>qc570709b20644640pts/21

e_Number>MNG4303F900000014AE6C0

1269058848966622617151977

alter user mng identified by **********replace *

 

**修改其它使用者口令的審計

11230106712144

ryId>2014-09-17T02:10:08.509927ZMNGoracle

r>qc570709b20644640pts/21

e_Number>ZD4303F800060014A82C0<

/Returncode>1269058848997422617151977

alter user zd identified by *

 

因此對於audit useraudit alter useralter user命令審計上的區別可以簡要概括如下:

 

Command

是否具有Alter user許可權

是否審計修改自己口令的操作

是否審計修改其它使用者口令的操作

Audit user

 

N

Y

Y

Y

Y

Y

Audit alter user

 

N

N

N

Y

Y

Y

 

我們再來測一下audit tableaudit create any table,看看這兩者的區別:

////////////////////////////////////////////////////

//AUDIT TABLE功能測試

///////////////////////////////////////////////////

####使用者沒有create any table許可權,audit table只審計自己使用者下的建表操作

--connect SYS

noaudit alter user;

revoke create any table from mng;

audit table;

 

--connect mng,建立自己的表,再建立別人的表,雖然沒有create any table許可權,也會審計建立其它使用者表的記錄

create table mng2 (id number);

create table zd.mng2 (id number);

 

 

   xmlns:xsi=""

   xsi:schemaLocation="">

   11.2

11230597860111

ryId>2014-09-18T02:49:17.827296ZMNGoracle

r>qc570709b13500864pts/21

e_Number>MNGUI1955

1269097431709340617151977

create table ui(col1 number)

11230597860122

ryId>2014-09-18T02:49:34.589832ZMNGoracle

r>qc570709b13500864pts/21

e_Number>ZDUI11031

12690974317219617151977

create table zd.ui(col1 number)

 

####使用者具有create any table許可權,audit table會同時審計自己使用者下的建表操作和在其它使用者下的建表操作

Create table t11(id number);

Create table zd.t11(id number);

 

 

   xmlns:xsi=""

   xsi:schemaLocation="">

   11.2

11230605035111

ryId>2014-09-18T02:54:22.229707ZMNGoracle

r>qc570709b16712244pts/21

e_Number>MNGT11103F600010014

182101269097431869540617151977

Create table t11(id number)

11230605035122

ryId>2014-09-18T02:54:22.433163ZMNGoracle

r>qc570709b16712244pts/21

e_Number>ZDT11103F7001600149

58901269097431870741617151977

Create table zd.t11(id number)

////////////////////////////////////////////////////

//AUDIT CREATE ANY TABLE功能測試

///////////////////////////////////////////////////

####使用者不具備create any table許可權,audit create any table的情況下,只記錄在別的使用者下建表的操作

--connect SYS

revoke create any table from mng;

noaudit table;

audit create any table;

 

--connect mng建立自己和其它使用者下表的都沒有生成審計

create table mng4 (id number);

create table zd.mng4 (id number);   

 

####使用者具備create any table許可權,audit create any table的情況下,只記錄在別的使用者下建表的操作

--connect SYS

grant create any table to mng;

noaudit table;

audit create any table;

 

--connect mng 產生的審計記錄中只看到建立其它使用者下表的操作

create table mng5 (id number);

create table zd.mng5 (id number);    --未記錄建立自及使用者下表的操作

 

 

   xmlns:xsi=""

   xsi:schemaLocation="">

   11.2

11230618196121

ryId>2014-09-18T03:34:46.207544ZMNGoracle

r>qc570709b12648702pts/21

e_Number>ZDMNG5103FF000F0016

4E0F01269100596513941617151977

create table zd.mng5 (id number)

 

因此對於audit tableaudit create any table審計效果上的區別可以簡要概括如下:

 

Command

是否具有create any table許可權

是否審計在自己使用者下建表的操作

是否審計在其它使用者下建表的操作

audit table

 

N

Y

Y

Y

Y

Y

audit create any table

N

N

N

Y

N

Y

 

再深入一點,audit table會審計create tabledrop tabletruncate table這三類語句,如果我僅僅需要審計其中的create table語句,即使用Audit create table會出現什麼結果:

 

--connect SYS

grant create any table to mng;

audit create table;

 

col audit_option format a30

set linesize 130

 

--看到系統自動將create tablecreate any table作為語句同時也作為許可權進行審計

select audit_option,success,failure from dba_stmt_audit_opts;

 

AUDIT_OPTION                   SUCCESS    FAILURE

------------------------------ ---------- ----------

CREATE TABLE                   BY ACCESS  BY ACCESS

CREATE ANY TABLE               BY ACCESS  BY ACCESS

 

select * from dba_priv_audit_opts;

 

PRIVILEGE                                SUCCESS    FAILURE

---------------------------------------- ---------- ----------

CREATE TABLE                             BY ACCESS  BY ACCESS

CREATE ANY TABLE                         BY ACCESS  BY ACCESS

 

--connect mng 產生的審計記錄中只看到建立其它使用者下表的操作

Create table mng7 (id number);

Create table zd.mng7(id number);

 

--生成的審計記錄也證明了上述的觀點

11230818872111

ryId>2014-09-18T05:07:17.548569ZMNGoracle

r>qc570709b15401590pts/21

e_Number>MNGMNG7103FF001B001

64F9601269100636527840617151977

>

Create table mng7 (id number)

11230818872122

ryId>2014-09-18T05:07:17.784559ZMNGoracle

r>qc570709b15401590pts/21

e_Number>ZDMNG7103FF000F0016

4E1F01269100636528641617151977

Create table zd.mng7(id number)

 

結論:在oracle的審計體系中,語句級的審計有兩種寫法一種是使用簡寫方式,比如執行

命令audit table則之後會對create tabledrop tabletruncate table三類操作進行審計,又

比如audit alter table僅會對alter table …語句進行審計,使用簡寫的方式是純粹語句級別的

審計,不涉及到許可權的問題。另一種就是Audit create table,這種寫法既會對create table

create any table語句進行審計,同時又因為Create table也是一種系統許可權,所以也會對

create tablecreate any table許可權進行審計,這種情況下語句級和許可權級的審計是無法完全

區分清楚的。在SQL Language Referenceaudit命令介紹裡有關於哪些命令屬於語句審計

哪些命令屬於許可權審計的詳細定義大家可以參考一下

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

相關文章