首页 > 数据库 > Oracle > 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">
ryId>
r>
e_Number>
--修改其它用户的口令,返回ORA-01031错误,虽然mng用户没有alter user权限但对其它用户的操作仍会留下印迹,因为audit user后面没有跟随whenever successful表明对于成功和失败两种情况均进行审计
alter user zd identified by asdf_1234 replace by old_password;
--有审计记录
ryId>
r>
e_Number>
17151977
注:
--赋予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">
注:
////////////////////////////////////////////////////
//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;
--记录下来的审计信息
**修改自己口令的审计
ryId>
r>
e_Number>
**修改其它用户口令的审计
ryId>
r>
e_Number>
/Returncode>
因此对于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">
ryId>
r>
e_Number>
ryId>
r>
e_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">
ryId>
r>
e_Number>
1821
ryId>
r>
e_Number>
589
////////////////////////////////////////////////////
//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">
ryId>
r>
e_Number>
4E0F
因此对于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);
--生成的审计记录也证明了上述的观点
ryId>
r>
e_Number>
64F96
>
ryId>
r>
e_Number>
4E1F
结论:在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博客 ” ,链接:https://blog.itpub.net/53956/viewspace-1272863/ ,如需转载,请注明出处,否则将追究法律责任。