oracle 提供了四种方式对于数据库操作的审核,
其中一种是基于sysdba dba权限用户的审核,,这种oracle的超级管理员用户可以检测到所有普通的用户的操作,,这是肯定的,但是在一般情况下,即使是dba管理员也希望能够被监控自己做了什么操作,,以便在发生数据库崩溃时,可以拿出保证自己没有胡乱操作的依据,,这也是表明是严格按照标准去管理的。
1除了第一种审核之外,还另外提供了三种审核方式:
①数据库审核:能够跟踪特定权限的使用,特定命令的执行,例如 一般的dml语句 和ddl 操作, (创建表或,对表数据进行操作),数据库会话请求,等。。
② 基于值的审核:可以通过声明一个触发器,,在对数据表数据进行修改的时候,触发一个pl/sql 块的执行,记录操作 的细节。
③ 细粒度审核:允许根据所访问的记录来跟踪对表的访问,,细粒度审核提供了更为精确的审核,并且可以限制审核记录的范围,只提取必要审核记录。
2 审核sysdba 用户的活动:
①如果要审核sysdba用户的活动需要把实力参数 audit_sys_operations 设置为true ,这样作为sysdba sysoper 外部身份认证的方式登录数据库用户所进行的每条操作的语句,都会被操作系统的审核跟踪,这里的记录是完整的。
需要注意的是:dba用户不能为操作系统的超级管理员,,如果dba同样也为操作系统的超级管理员那么审核跟踪记录可能会被dba 管理员所篡改,,这就失去了审核的意义,
sys的审核记录的文件夹在不同的平台上管理不同,window是 是 window application log linux系统 在 audit_file_dest 参数定义的位置。
3 数据库审核:
① 在设置数据库审核之前必须设置 audit_trail 实例参数,可以设置的参数值如下:
none 或者false : 禁用数据库审核。
OS: 审核记录会被写入操作系统审核跟踪。
DB: 审核记录会被写入数据字典表 SYS.AUD$ ,
DB_EXTENDED 审核记录会包含具体绑定变量的sql语句被写入数据字典表 SYS.AUD$
XML : 以xml格式写入操作系统审核跟踪。
XML_EXTENDED : 记录绑定具体变量的sql 写入操作系统审核跟踪。
使用audit 配置数据库审核跟踪
例: 审核权限使用, audit create any trigger; 在授予任意用户create any trigger权限时将记录记入审核跟踪。
为每个会话生成一条审核记录: audit insert on owner.tablename whenver successful by session ;
每次执行都生成一条审核记录: audit insert on owner.tablename by access;
审核用户登录: audit session whenever not successful.
② 提问: 怎样查看审核跟踪记录呢?
需要依据 audit_trail 实例参数的配置, 如果配置为 OS XML XML_EXTENDED 那么根据操作系统的不同(参考2 ①)审核跟踪记录会以文件的形式保存在操作系 统中, 如果 配置为 DB 或 DB_EXTENDED 审核记录会被记录入 SYS.AUD$ 表中,可以通过查询视图 DBA_AUDIT_TRAIL (DBA_AUDIT_OBJECT,DBA_AUDIT_STATEMENT,DBA_AUDIT_SESSION)查看审核记录。
4 使用触发器基于值的审核:
声明触发器 create or replace trigger owner.triggername
after update of column
on owner.tablename REFERENCING NEW AS NEW OLD AS OLD
for each row
begin
if :old.cloumn!=;new.column then
insert into owner.tablename values(sys_context('uesrenv','os_suer'), sys_context('userenv','ip_address'), :new.column || ' column change from '|| :old.column || ' to ' || :new.column);
end if;
end;
/
5 细粒度审核:
① 细粒度审核(fine-grained auditing fga)可配置精确到单元行 和单元列。
② 配置fga 需要通过dbsm_fga 包的一个存储过程 add_policy.
③ 查看fga结果 可以查询 DBA_FGA_AUDIT_TRAIL 视图。
例子:
execute dbms_fga.add_policy(object_schema=>'hr', object_name=>'jobs',policy_name=>'pol1',audit_condition=>'MIN_SALARY>5000' , audit_column=>JOB_TITLE');
捕获读取hr 的jobs 表,对列job_title 的所有select 查询,且对应的职位薪资是大于5000的。
补充: DBA_AUDIT_TRIAL 视图 显示标准数据库审核 DBA_FGA_AUDTI_TARIL视图 显示fga(细粒度审核) , DBA_COMMON_AUDIT_TRAIL视图 两者都显示。