共计 16352 个字符,预计需要花费 41 分钟才能阅读完成。
1.Audit 的概念
Audit 是监视和记录用户对数据库进行的操作,以供 DBA 进行问题分析。利用 Audit 功能,可以完成以下任务:
- 监视和收集特定数据库活动的数据。例如管理员能够审计哪些表被更新,在某个时间点上有多少个并行用户统计数据;
- 保证用户对自己的活动负责。这些活动包括在特定模式、特定表、特定行等对象上进行的操作;
- 审计数据库中的可疑活动。如一个未经授权的用户正从表中删除数据,那么数据库管理员必须审计所有数据库连接,以及在数据库中所有成功和失败的删除操作。
根据审计类型不同,审计记录中的信息也有所不同。通常,一条审计记录中包含用户名、会话标识、终端标识、所操作的模式对象名称、执行的操作、执行的完整语句代码、日期和时间戳、所使用的系统权限。
2.Audit 的分类
在 Oracle 11g 中,一共有 4 种审计类型:
- 语句审计(Statement Auditing):对特定的 SQL 语句进行审计,不指定具体对象;
- 权限审计(Privilege Auditing):对特定的系统权限使用情况进行审计;
- 对象审计(Object Auditing):对特定的模式对象上执行的特定语句进行审计;
- 网络审计(Network Auditing):对网络协议错误与网络层内部错误进行审计。
此外,根据用户是否成功执行,可以分为对执行成功的语句进行审计、对不成功的语句进行审计、无论成功与否都进行审计。
根据对同一个语句审计次数不同,可以分为会话审计和存取审计。会话审计是指对某个用户或所有用户的同一语句只审计一次,形成一条审计记录;存取审计是指对某个用户或所有用户的同一语句每执行一次审计一次,形成多条审计记录。
3. 审计环境设置
使用审计功能,需要对数据库初始化参数 AUDIT_TRAIL 进行设置,其参数值可以为:
- none:不启用审计功能;
- db:启用审计功能,审计信息写入 sys.aud$ 数据字典中,审计的结果只有连接信息(sys 用户的记录以及强制性要求的记录都写入操作系统文件中);
- db_extended:审计结果除了有连接信息,还有执行的具体语句。关于 db 与 db_extended 的区别,见例子 1;
- os:启用审计功能,审计信息写入操作系统文件;
- xml:启用审计功能,审计信息写入 xml 格式的操作系统文件中;
查看是否启用了审计功能:
SQL> show parameter audit_trail
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_trail string DB
修改审计环境参数:
SQL> alter system set audit_trail = 'DB_EXTENDED' scope = spfile;
System altered
SQL> shutdown immediate;
—
需要重启数据库
SQL> startup;
4. 审计详解
4.1 语句审计(Statement auditing)
(1)语句审计是对特定的 SQL 语句进行审计,与具体的对象没有关系。创建语句审计的基本语法为:
sql_statement_
shortcut | ALL |
ALL STATEMENTS
[BY user_lists] | [IN SESSION CURRENT] [BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]
解释:
–sql_statement_
shortcut:被审计的 SQL 语句的快捷方式;
– ALL:审计大部分 SQL 语句,这里不在列出;
– ALL STATEMENT:对最高级别的 SQL 语句进行审计,即对直接执行的 SQL 语句进行审计,而不对包含在 PL/SQL 程序中的 SQL 语句进行审计;
– BY user_lists:指定审计的用户,如果不指定,则审计全部用户;
– IN SESSION CURRENT:只对当前会话进行审计;
– BY SESSION:会话审计,同一个 SQL 语句只审计一次;
– BY ACCESS:存取审计,同一个 SQL 语句执行几次就审计几次;
– WHENEVER SUCCESSFUL:只审计执行成功的 SQL 语句;
– WHENEVER NOT SUCCESS:只审计执行不成功的 SQL 语句;
(2)如果要取消对某个语句的审计,只需将 AUDIT 命令改为 NOAUDIT 命令即可,其语法与创建 AUDIT 相同。
(3)通过数据字典 DBA_STMT_AUDIT_OPTS 可以了解当前数据库哪些用户进行了语句审计及审计设置信息。例如,查看与 scott 用户相关的语句审计:
SQL> select * from dba_stmt_audit_opts where user_name='SCOTT';
USER_NAME PROXY_NAME AUDIT_OPTION SUCCESS FAILURE
--------- ----------- --------------- ---------- ----------
SCOTT TABLE BY ACCESS BY ACCESS
SCOTT INSERT TABLE BY ACCESS BY ACCESS
例子 1. 在 scott 模式下创建表 test02,查看其审计信息。
查看 audit_trace 参数
SQL> show parameter audit_trail
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_trail string DB
step1. 对 scott 用户创建语句审计
audit table
by scott
by access
audit insert table
by scott
by access
step2. 创建表 test02,插入 2 行数据:
SQL> show user;
User is "SCOTT"
SQL> create table test02
(id number,
name varchar(40),
local varchar(50)
);
Table created
SQL> commit;
Commit complete
SQL> insert into test02
values(1,'lihua','chengdu');
SQL> insert into test02 values(2,'ll','dd');
1 row inserted
SQL> commit;
Commit complete
step3. 查看 sys.aud$ 和 sys.audit_actions 视图
select
a.userid,
a.userhost,
a.terminal,
a.action#,
aa.name,
dbms_lob.substr(a.sqltext) as sqltext,
dbms_lob.substr(a.sqlbind) as sqlbind,
a.obj$creator,
a.obj$name,
a.ntimestamp#+8/24
from
sys.aud$ a,
sys.audit_actions aa
where
a.obj$name = 'TEST02'
and
a.action# = aa.action
and
a.ntimestamp# > to_date('20170412','yyyymmdd');
结果为:
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
------- -------------------------- ---------------- ------- ------------- -------------------------------------- -------- ----------- -------- ------------------
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 1 CREATE TABLE SCOTT TEST02 2017/4/15 13:58:54
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT SCOTT TEST02 2017/4/15 14:00:00
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT SCOTT TEST02 2017/4/15 15:27:26
结合 sys.aud$ 和 sys.audit.actions,我们可与看到对数据库进行了 create table 和 2 次 insert 操作,但是我们还是不知道具体信息。接下来,我们将 audit_trail 参数改为:audit_trail = db_extended。
step4. 修改 audit_trail 参数
SQL> alter system set audit_trail = 'DB_EXTENDED' scope = spfile;
System altered
SQL> shutdown immediate ;
SQL>startup;
SQL> show parameter audit_trail
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_trail string DB_EXTENDED
此时,再向 test02 表插入 1 行数据
SQL> insert into test02 values(3,'cc','vv');
1 row inserted
SQL> commit;
Commit complete
step5. 再次查看 sys.aud$ 和 sys.audit_actions 视图
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
------- -------------------------- ---------------- ------- ------------- -------------------------------------- -------- ----------- -------- ------------------
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 1 CREATE TABLE SCOTT TEST02 2017/4/15 13:58:54
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT SCOTT TEST02 2017/4/15 14:00:00
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT SCOTT TEST02 2017/4/15 15:27:26
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT insert into test02 values(3,'cc','vv') SCOTT TEST02 2017/4/15 16:31:53
可以看到,在 SQLTEXT 栏位有了具体的执行 SQL 语句。
4.2 权限审计
(1)权限审计是对特定的 系统权限 进行审计,语法为:
system_privilege |
[ALL PRIVILEGES] [BY user_lists] | [IN SESSION CURRENT] [BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]
(2)如果要了解当前数据库中对哪些用户使用了什么权限审计,可以通过数据字典 DBA_PRIV_AUDIT_OPTS 来查看。
例子 2. 对 scott 用户的 select any table 权限进行审计
step1. 查看 scott 的系统权限
SQL> select * from dba_sys_privs where grantee = 'SCOTT';
GRANTEE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
SCOTT CREATE ANY TABLE NO
SCOTT UNLIMITED TABLESPACE NO
SCOTT CREATE ANY VIEW NO
step2. 使用 scott 用户,在模式‘LIJIAMAN’下创建表 test03,查询其审计信息:
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
------ ------------------------- --------------- ---------- ------------ ---------------------------- -------- ------------ --------- ------------------
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 1 CREATE TABLE create table lijiaman.test03 LIJIAMAN TEST03 2017/4/15 19:08:20
(id number,
name varchar(20)
)
step3. 使用 scott 用户,在 scott 下创建表 test05, 查询其审计信息:
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
------- -------------------------- ---------------- ---------- --------------- -------------------- --------- ------------ ---------- ------------------
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 1 CREATE TABLE SCOTT TEST05 2017/4/15 19:38:24
create table test05
(id number,
name varchar(30)
)
通过这个这个例子,我们可以看到,只要 scott 用户使用 select any table 权限,我们就可以通过审计得到其操作信息。
4.3 对象审计
(1)对象审计是指对特定模式对象的操作进行审计,与用户无关,语法为:
sql_operation |
ALL ON [schema.]object] [BY user_lists] | [IN SESSION CURRENT][BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]
其中,sql_operation 指定了特定对象上要审计的 SQL 语句。
(2)如果要查看当前数据库哪些模式对象进行了对象审计,可以通过查询 DBA_OBJ_AUDIT_OPTS 获得。
例子 3. 对模式 scott 下的表 dept 进行对象审计
SQL> audit all on scott.dept by session;
Audit succeeded
查看其审计信息:
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
---------------- -------------------------- ---------------- ---------- ----------- ---------------------------------- -------- ------------ ---------- ------------------
LIJIAMAN WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 103 SESSION REC select * from scott.dept SCOTT DEPT 2017/4/15 20:13:47
LIJIAMAN WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 103 SESSION REC audit all on scott.dept by session SCOTT DEPT 2017/4/15 20:13:19
4.4 网络审计
网络审计对协议错误与网络层内部错误进行审计,网络审计捕获客户端与服务器通信过程中发生的错误,这些错误由 SQL*NET 网络服务抛出。网络审计的语法为:
AUDIT NETWORK
[BY SESSION | ACCESS]
[WHENEVER [NOT] SUCCESSFUL]
下一篇介绍如何去清理 Audit 数据。
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-10/147360p2.htm
在上一篇,初步了解了 Audit 的作用以及如何使用 Audit,本篇记录如何手动清理 Audit 数据。
(一)概述
Audit 的数据主要存储在 sys.aud$ 表中,该表默认位于 system 表空间中,我们根据需求,将该表移到了 sysaux 表空间中。由于审计数据量较大,需要经常关注 sysaux 表空间的使用情况, 同时根据实际情况对 sys.aud$ 表进行数据清理。
(二)清理步骤
(1)使用 sys 账号登陆数据库,打开计时功能,方便查看每一个命令的执行时间
SQL> set timing on
(2)在清理数据之前先查看数据量大小
SQL> select count(*) from sys.aud$;
(3)查看 Audit 表中最早一笔数据的时间, 即审计表中记录的最早的时间
SQL> select min(ntimestamp#) from sys.aud$;
MIN(NTIMESTAMP#)
----------------------------------------
23-11 月-16 08.18.54.496893 上午
(4)查看审计数据最后归档时间,只有归档的数据才能删除
SQL> SELECT * FROM dba_audit_mgmt_last_arch_ts;
AUDIT_TRAIL RAC_INSTANCE LAST_ARCHIVE_TS
----------- ------------ --------------------------------
STANDARD AUDIT TRAIL 0 14- 3 月 -17 01.22.49.000000 下午 +00:00
(5)初始化清理 Audit 的功能,该命令 只有在第一次执行时需要运行,default_cleanup_interval =>168 代表清理周期为 168 小时。
SQL>
BEGIN
sys.DBMS_AUDIT_MGMT.init_cleanup(audit_trail_type => sys.DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
default_cleanup_interval => 168);
END;
/
(6)确认清除 Audit 功能是否开启,yes 为开启
SET SERVEROUTPUT ON
BEGIN
IF sys.DBMS_AUDIT_MGMT.is_cleanup_initialized(sys.DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD) THEN
DBMS_OUTPUT.put_line(‘YES‘);
ELSE
DBMS_OUTPUT.put_line(‘NO‘);
END IF;
END;
/
(7)设置需要清理的天数,最后一个数字‘7’代表清理‘7’天前的数据(归档时间大于等于清除时间)
BEGIN
sys.DBMS_AUDIT_MGMT.set_last_archive_timestamp(
audit_trail_type => sys.DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
last_archive_time=> SYSTIMESTAMP–7 /* Day*/);
END;
/
(8) 执行清除,时间长短受数据量大小影响(经测试 600 万条数据大约 20 分钟)
BEGIN
sys.DBMS_AUDIT_MGMT.clean_audit_trail(
audit_trail_type => sys.DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
use_last_arch_timestamp=> TRUE);
END;
/
(9)在清理后,sys.aud$ 表的大小并没有发生改变,需要收回空间
解释:在上面清理表 sys.aud$ 后,实际上,数据还在磁盘上,只是数据不受保护了而已,其空间并没有释放,需要将其释放回收
SQL> select segment_name,bytes/1024/1024 from dba_segments where segment_name='AUD$'; --查看 aud$ 的大小
SEGMENT_NAME BYTES/1024/1024
-------------------------------------------------------------------------------- ---------------
AUD$ 3456
SQL> alter table sys.aud$ enable row movement; --激活行移动
Table altered.
SQL> SQL> alter table sys.aud$ shrink space cascade; --进行空间回收
Table altered.
SQL> alter table sys.aud$ disable row movement; --关闭行移动
Table altered.
SQL> select segment_name,bytes/1024/1024 from dba_segments where segment_name='AUD$'; ---- 再次查看 aud$ 的大小
SEGMENT_NAME BYTES/1024/1024
-------------------------------------------------------------------------------- ---------------
AUD$ 666.8125
经过 2 次查看空间大小,可以看到空间已经被释放。
更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147360.htm
1.Audit 的概念
Audit 是监视和记录用户对数据库进行的操作,以供 DBA 进行问题分析。利用 Audit 功能,可以完成以下任务:
- 监视和收集特定数据库活动的数据。例如管理员能够审计哪些表被更新,在某个时间点上有多少个并行用户统计数据;
- 保证用户对自己的活动负责。这些活动包括在特定模式、特定表、特定行等对象上进行的操作;
- 审计数据库中的可疑活动。如一个未经授权的用户正从表中删除数据,那么数据库管理员必须审计所有数据库连接,以及在数据库中所有成功和失败的删除操作。
根据审计类型不同,审计记录中的信息也有所不同。通常,一条审计记录中包含用户名、会话标识、终端标识、所操作的模式对象名称、执行的操作、执行的完整语句代码、日期和时间戳、所使用的系统权限。
2.Audit 的分类
在 Oracle 11g 中,一共有 4 种审计类型:
- 语句审计(Statement Auditing):对特定的 SQL 语句进行审计,不指定具体对象;
- 权限审计(Privilege Auditing):对特定的系统权限使用情况进行审计;
- 对象审计(Object Auditing):对特定的模式对象上执行的特定语句进行审计;
- 网络审计(Network Auditing):对网络协议错误与网络层内部错误进行审计。
此外,根据用户是否成功执行,可以分为对执行成功的语句进行审计、对不成功的语句进行审计、无论成功与否都进行审计。
根据对同一个语句审计次数不同,可以分为会话审计和存取审计。会话审计是指对某个用户或所有用户的同一语句只审计一次,形成一条审计记录;存取审计是指对某个用户或所有用户的同一语句每执行一次审计一次,形成多条审计记录。
3. 审计环境设置
使用审计功能,需要对数据库初始化参数 AUDIT_TRAIL 进行设置,其参数值可以为:
- none:不启用审计功能;
- db:启用审计功能,审计信息写入 sys.aud$ 数据字典中,审计的结果只有连接信息(sys 用户的记录以及强制性要求的记录都写入操作系统文件中);
- db_extended:审计结果除了有连接信息,还有执行的具体语句。关于 db 与 db_extended 的区别,见例子 1;
- os:启用审计功能,审计信息写入操作系统文件;
- xml:启用审计功能,审计信息写入 xml 格式的操作系统文件中;
查看是否启用了审计功能:
SQL> show parameter audit_trail
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_trail string DB
修改审计环境参数:
SQL> alter system set audit_trail = 'DB_EXTENDED' scope = spfile;
System altered
SQL> shutdown immediate;
—
需要重启数据库
SQL> startup;
4. 审计详解
4.1 语句审计(Statement auditing)
(1)语句审计是对特定的 SQL 语句进行审计,与具体的对象没有关系。创建语句审计的基本语法为:
sql_statement_
shortcut | ALL |
ALL STATEMENTS
[BY user_lists] | [IN SESSION CURRENT] [BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]
解释:
–sql_statement_
shortcut:被审计的 SQL 语句的快捷方式;
– ALL:审计大部分 SQL 语句,这里不在列出;
– ALL STATEMENT:对最高级别的 SQL 语句进行审计,即对直接执行的 SQL 语句进行审计,而不对包含在 PL/SQL 程序中的 SQL 语句进行审计;
– BY user_lists:指定审计的用户,如果不指定,则审计全部用户;
– IN SESSION CURRENT:只对当前会话进行审计;
– BY SESSION:会话审计,同一个 SQL 语句只审计一次;
– BY ACCESS:存取审计,同一个 SQL 语句执行几次就审计几次;
– WHENEVER SUCCESSFUL:只审计执行成功的 SQL 语句;
– WHENEVER NOT SUCCESS:只审计执行不成功的 SQL 语句;
(2)如果要取消对某个语句的审计,只需将 AUDIT 命令改为 NOAUDIT 命令即可,其语法与创建 AUDIT 相同。
(3)通过数据字典 DBA_STMT_AUDIT_OPTS 可以了解当前数据库哪些用户进行了语句审计及审计设置信息。例如,查看与 scott 用户相关的语句审计:
SQL> select * from dba_stmt_audit_opts where user_name='SCOTT';
USER_NAME PROXY_NAME AUDIT_OPTION SUCCESS FAILURE
--------- ----------- --------------- ---------- ----------
SCOTT TABLE BY ACCESS BY ACCESS
SCOTT INSERT TABLE BY ACCESS BY ACCESS
例子 1. 在 scott 模式下创建表 test02,查看其审计信息。
查看 audit_trace 参数
SQL> show parameter audit_trail
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_trail string DB
step1. 对 scott 用户创建语句审计
audit table
by scott
by access
audit insert table
by scott
by access
step2. 创建表 test02,插入 2 行数据:
SQL> show user;
User is "SCOTT"
SQL> create table test02
(id number,
name varchar(40),
local varchar(50)
);
Table created
SQL> commit;
Commit complete
SQL> insert into test02
values(1,'lihua','chengdu');
SQL> insert into test02 values(2,'ll','dd');
1 row inserted
SQL> commit;
Commit complete
step3. 查看 sys.aud$ 和 sys.audit_actions 视图
select
a.userid,
a.userhost,
a.terminal,
a.action#,
aa.name,
dbms_lob.substr(a.sqltext) as sqltext,
dbms_lob.substr(a.sqlbind) as sqlbind,
a.obj$creator,
a.obj$name,
a.ntimestamp#+8/24
from
sys.aud$ a,
sys.audit_actions aa
where
a.obj$name = 'TEST02'
and
a.action# = aa.action
and
a.ntimestamp# > to_date('20170412','yyyymmdd');
结果为:
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
------- -------------------------- ---------------- ------- ------------- -------------------------------------- -------- ----------- -------- ------------------
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 1 CREATE TABLE SCOTT TEST02 2017/4/15 13:58:54
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT SCOTT TEST02 2017/4/15 14:00:00
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT SCOTT TEST02 2017/4/15 15:27:26
结合 sys.aud$ 和 sys.audit.actions,我们可与看到对数据库进行了 create table 和 2 次 insert 操作,但是我们还是不知道具体信息。接下来,我们将 audit_trail 参数改为:audit_trail = db_extended。
step4. 修改 audit_trail 参数
SQL> alter system set audit_trail = 'DB_EXTENDED' scope = spfile;
System altered
SQL> shutdown immediate ;
SQL>startup;
SQL> show parameter audit_trail
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_trail string DB_EXTENDED
此时,再向 test02 表插入 1 行数据
SQL> insert into test02 values(3,'cc','vv');
1 row inserted
SQL> commit;
Commit complete
step5. 再次查看 sys.aud$ 和 sys.audit_actions 视图
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
------- -------------------------- ---------------- ------- ------------- -------------------------------------- -------- ----------- -------- ------------------
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 1 CREATE TABLE SCOTT TEST02 2017/4/15 13:58:54
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT SCOTT TEST02 2017/4/15 14:00:00
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT SCOTT TEST02 2017/4/15 15:27:26
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 2 INSERT insert into test02 values(3,'cc','vv') SCOTT TEST02 2017/4/15 16:31:53
可以看到,在 SQLTEXT 栏位有了具体的执行 SQL 语句。
4.2 权限审计
(1)权限审计是对特定的 系统权限 进行审计,语法为:
system_privilege |
[ALL PRIVILEGES] [BY user_lists] | [IN SESSION CURRENT] [BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]
(2)如果要了解当前数据库中对哪些用户使用了什么权限审计,可以通过数据字典 DBA_PRIV_AUDIT_OPTS 来查看。
例子 2. 对 scott 用户的 select any table 权限进行审计
step1. 查看 scott 的系统权限
SQL> select * from dba_sys_privs where grantee = 'SCOTT';
GRANTEE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
SCOTT CREATE ANY TABLE NO
SCOTT UNLIMITED TABLESPACE NO
SCOTT CREATE ANY VIEW NO
step2. 使用 scott 用户,在模式‘LIJIAMAN’下创建表 test03,查询其审计信息:
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
------ ------------------------- --------------- ---------- ------------ ---------------------------- -------- ------------ --------- ------------------
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 1 CREATE TABLE create table lijiaman.test03 LIJIAMAN TEST03 2017/4/15 19:08:20
(id number,
name varchar(20)
)
step3. 使用 scott 用户,在 scott 下创建表 test05, 查询其审计信息:
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
------- -------------------------- ---------------- ---------- --------------- -------------------- --------- ------------ ---------- ------------------
SCOTT WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 1 CREATE TABLE SCOTT TEST05 2017/4/15 19:38:24
create table test05
(id number,
name varchar(30)
)
通过这个这个例子,我们可以看到,只要 scott 用户使用 select any table 权限,我们就可以通过审计得到其操作信息。
4.3 对象审计
(1)对象审计是指对特定模式对象的操作进行审计,与用户无关,语法为:
sql_operation |
ALL ON [schema.]object] [BY user_lists] | [IN SESSION CURRENT][BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]
其中,sql_operation 指定了特定对象上要审计的 SQL 语句。
(2)如果要查看当前数据库哪些模式对象进行了对象审计,可以通过查询 DBA_OBJ_AUDIT_OPTS 获得。
例子 3. 对模式 scott 下的表 dept 进行对象审计
SQL> audit all on scott.dept by session;
Audit succeeded
查看其审计信息:
USERID USERHOST TERMINAL ACTION# NAME SQLTEXT SQLBIND OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
---------------- -------------------------- ---------------- ---------- ----------- ---------------------------------- -------- ------------ ---------- ------------------
LIJIAMAN WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 103 SESSION REC select * from scott.dept SCOTT DEPT 2017/4/15 20:13:47
LIJIAMAN WORKGROUP\DESKTOP-TKAPD8E DESKTOP-TKAPD8E 103 SESSION REC audit all on scott.dept by session SCOTT DEPT 2017/4/15 20:13:19
4.4 网络审计
网络审计对协议错误与网络层内部错误进行审计,网络审计捕获客户端与服务器通信过程中发生的错误,这些错误由 SQL*NET 网络服务抛出。网络审计的语法为:
AUDIT NETWORK
[BY SESSION | ACCESS]
[WHENEVER [NOT] SUCCESSFUL]
下一篇介绍如何去清理 Audit 数据。
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-10/147360p2.htm