Oracle中开启某张表的审计(audit)

2014-11-24 17:19:05 · 作者: · 浏览: 0

它的参数有下面几种


NONE:不开启审计


OS:说明审计信息放在系统汇总,如果是Linux那么由audit_file_dest 决定,如果是Windows 那么由事件查看器决定


DB 或 TRUE :表示审计信息存放在数据库里,也就是sys 用户的aud$ 表。


审计范围分为session 和 access两种


session:表示用户登录之后执行的相同SQL只记录一次,其他相同SQL不再记录;


access:表示每次执行的SQL都进行审计记录。


1、开启审计参数


SQL> alter system set audit_trail=db_extended scope=spfile sid='*';


2、重启数据库


为了使参数生效


su - oracle


$ srvctl stop database -d orcl


$ srvctl start database -d orcl


SQL> show parameter audit;


3、设置对表进行审计


这样每次有用户对表进行操作,那么都会有相应的记录被添加到aud$中,而Oracle为了方便读取数据,创建了视图。


虽然会记录每个用户对表的操作,但是不会记录sys用户的操作,其他所有用户都会做记录。


SQL> audit all on scott.emp by access;


设置之后如果想要看到效果,可以用Scott用户登录进来对表进行操作。


--------------------------------------分割线 --------------------------------------


--------------------------------------分割线 --------------------------------------


4、查询审计记录


$ su - oracle


$ sqlplus / as sysdba


alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';


col OS_USERNAME for a10


col USERNAME for a11


col USERHOST for a10


col TERMINAL for a10


col TIMESTAMP for a20


col obj_name for a10


col OWNER for a10


col ACTION_NAME for a11


col TRANSACTIONID for a16


col sql_text for a30


select username,userhost,timestamp,owner,obj_name,action_name,sql_text from dba_audit_trail;


username 登录的用户


userhost 登录的主机


timestamp 时间戳


owner 操作表的所有者


obj_name 操作的表


action_name 做了什么动作


sql_text 具体的SQL


其他:


1、清空aud$


这张系统表是可以使用TRUNCATE命令截断的。把它删掉之后那么视图中的记录也就相应消失了。


SQL> truncate table aud$;


2、取消某张表的审计


SQL> noaudit all on scott.emp;


3、关闭审计


SQL> alter system set audit_trail=none;