数据库审计audit 13.1 审计的
功能:监控
特定用户在database 的action(操作) 13.2 审计种类: 1)标准
数据库审计(语句审计、权限审计、对象审计) 2)基于值的审计(Value-Based,触发器审计) 3)精细审计(FGA) 13.3 启用审计(默认不启用) 09:55:23
sql> show parameter audit NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ audit_file_dest string /u01/admin/timran11g/adump audit_sys_operations boolean FALSE audit_syslog_level string audit_trail string DB
sql> audit_trail参数三个选项 1)none 不启用audit 2)db 将审计结果放在数据字典基表sys.aud$中,(一般用于审计非sys
用户,也可以移出system表空间,在DB中的好处是方便检索) 3)os 将审计结果存放到操作系统的
文件里(由audit_file_dest指定的位置,一般用于审计sys) 审计sys 1)Oracle强制审计sys
用户的特权操作,如启动和
关闭数据库,结果记录在参数audit_file_dest指向的.aud
文件中。 2)指定参数audit_sys_operations = true 和 audit_trail = os 13.4 标准
数据库审计的三个级别 查看标准审计结果可以通过视图dba_audit_taile,该视图读取aud$
内容。 13.4.1 语句审计 按语句来审计,比如audit table会审计
数据库中所有的create table,drop table,truncate table语句,执行成功或不成功都可审计。
sql> audit table; 13.4.2 权限审计 按权限来审计,当
用户使用了该权限则被审计,如执行grant select any table to a; 当
用户a访问了
用户b的表时(如select * from b.t;) 会用到select any table权限,故会被审计。
用户访问自己的表不会被审计。
sql> audit select any table; 13.4.3 对象审计 按对象审计,只审计on关键字指定对象的相关操作,如:aduit alter,delete,drop,insert on cmy.t by scott; 这里会对cmy
用户的t表进行审 计,但同时使用了by子句,所以只会对scott
用户发起的操作进行审计。
sql> audit update on scott.emp; 13.5 基于值的审计。 它拓展了标准
数据库审计,不仅捕捉审计事件,还捕捉那些被insert,update和delete的值。由于基于值的审计是通过触发器来实现。所以你可以选择哪些信息进入审计记录,比如,只记录提交的信息,或不记录已改变的数据等。(注意点) 例,记录下scott的
登录轨迹。 linux下sys:
sql> truncate table aud$;
sql> audit session by scott;
sql> select count(*) from aud$; COUNT(*) ---------- 0 cmd下scott: C:\Documents and Settings\timran>
sqlplus scott/scott@timran11g linux下sys:
sql> select count(*) from aud$; COUNT(*) ---------- 1 col username for a10; col userhost for a30;
sql> select username,userhost,timestamp,action_name from dba_audit_trail; USERNAME USERHOST TIMESTAMP ACTION_NAME ---------- ------------------------------ ------------------- ---------------------------- SCOTT WORKGROUP\TIMRAN-222C75E5 2014-01-09 13:35:53
logoN
sql> noaudit session by scott; 13.6 精细审计Fine Grained Auditing (FGA)。它拓展了标准
数据库审计,捕捉准确的
sql语句。 EM中只有标准
数据库审计,目前还没有
包括基于值的审计和精细审计。 13.6.1 举例:精细审计Fine Grained Auditing (FGA),审计访问特定行或特定行的特定列。操作可以使用dbms_fga包。 sys:
sql> create table scott.emp1 as select * from scott.emp;
sql> grant all on scott.emp1 to tim; 1)
添加一个精细度审计策略 begin dbms_fga.add_policy( object_schema=>'scott',object_name=>'emp1',policy_name=>'chk_emp1',audit_condition =>'deptno=20',audit_column =>'sal',statement_types =>'update,select'); end; / 2)测试一下步骤,再查看审计结果 scott:
sql> select * from emp1 where deptno=20; tim:
sql>update scott.emp1 set sal=8000 where empno=7902;
sql>select empno,ename from scott.emp1 where deptno=20; //缺少sal列,不审计 sys:
sql> select empno,ename,sal from scott.emp1 where deptno=20; //虽然符合条件,但sys默认不审计 3)验证审计结果 11:32:24
sql> conn /as sysdba
sql> select db_user,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss') "time",
sql_text from dba_fga_audit_trail; DB_USER time
sql_TEXT ------------------------------ ------------------- ------------------------------------------------------------------------- SCOTT 2013-08-17 16:57:36 select * from emp1 where deptno=20 TIM 2013-08-17 16:57:52 update scott.emp1 set sal=8000 where empno=7902 可以看出,必须同时满足了所有审计条件(前面定义的)才能入选。另外没有审计SYS.
sql> truncate table fga_log$; //清除审计记录
sql> select db_user,
sql_text from dba_fga_audit_trail; no rows selected 4)
删除FGA的PL/
sql API命令 exec dbms_fga.drop_policy(object_schema=>'scott',policy_name=>'chk_emp1'); 注意点: 视图DBA_AUDIT_TRIAL
显示标准
数据库审计,DBA_FGA_AUDIT_TRIAL
显示FGA,DBA_COMMON_AUDIT_TRIAL则两者都
显示.要查看触发器审核结果,必须创建处理自己定义的表的
自定义视图。
原文链接:https://www.f2er.com/oracle/213131.html