知方号

知方号

Audit里审计SQL语句与审计系统权限的区别

Audit里审计SQL语句与审计系统权限的区别

Audit可以实现对于特定对象、特定SQL语句、特定权限的审计,其中对于SQL语句和系统权限的审计在概念上有时容易混淆起来,比如拿audit user与audit alter user作比较.

 

audit user是对SQL语句的审计,采用是简写的方式,相当于以下三条语句共同作用的结果:

audit alter user ;

audit create user ;

audit drop user;

即会对alter user、create user、drop 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="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://xmlns.oracle.com/oracleas/schema/dbserver_audittrail-11_2.xsd">

   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="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://xmlns.oracle.com/oracleas/schema/dbserver_audittrail-11_2.xsd">

   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 user和audit alter user在alter user命令审计上的区别可以简要概括如下:

 

Command

是否具有Alter user权限

是否审计修改自己口令的操作

是否审计修改其它用户口令的操作

Audit user

 

N

Y

Y

Y

Y

Y

Audit alter user

 

N

N

N

Y

Y

Y

 

我们再来测一下audit table和audit 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="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://xmlns.oracle.com/oracleas/schema/dbserver_audittrail-11_2.xsd">

   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="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://xmlns.oracle.com/oracleas/schema/dbserver_audittrail-11_2.xsd">

   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="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://xmlns.oracle.com/oracleas/schema/dbserver_audittrail-11_2.xsd">

   11.2

11230618196121

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

r>qc570709b12648702pts/21

e_Number>ZDMNG5103FF000F0016

4E0F01269100596513941617151977

create table zd.mng5 (id number)

 

因此对于audit table和audit 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 table、drop table、truncate 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 table、create 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 table、drop table、truncate table三类操作进行审计,又

比如audit alter table仅会对alter table …语句进行审计,使用简写的方式是纯粹语句级别的

审计,不涉及到权限的问题。另一种就是Audit create table,这种写法既会对create table、

create any table语句进行审计,同时又因为Create table也是一种系统权限,所以也会对

create table、create any table权限进行审计,这种情况下语句级和权限级的审计是无法完全

区分清楚的。在SQL Language Reference中audit命令介绍里有关于哪些命令属于语句审计

哪些命令属于权限审计的详细定义大家可以参考一下

来自 “ ITPUB博客 ” ,

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。