fga 例子 oracle,Oracle FGA 实例

本文详细介绍了Oracle的Fine-Grained Audit(FGA)机制,包括audit trail的选项、审计策略的创建语法,并给出了多个示例,如审计特定列、审计条件、审计到数据库或XML文件,以及使用处理过程的审计。通过FGA,可以精确地审计对特定表的操作,例如只审计余额超过特定值的账户操作。
摘要由CSDN通过智能技术生成

前面对audit有详细的记录:下面是在机器上做的例子:

普通audit

audit insert,update,delete on scheam.tables by access whenever successful;

by

access/bysession:

byaccess每一个被审计的操作都会生成一条audittrail。

bysession一个会话里面同类型的操作只会生成一条audittrail,默认为bysession。

whenever[not]successful:

wheneversuccessful操作成功(dba_audit_trail中returncode字段为0)才审计,

whenevernotsuccessful反之。省略该子句的话,不管操作成功与否都会审计。

FGA

创建审计策略的语法

DBMS_FGA.ADD_POLICY (

object_schema VARCHAR2, --schema的名字,表或视图的拥有者

object_name VARCHAR2, --对象名,表或视图的名字

policy_name VARCHAR2, --审计策略名字,它和数据库中其他对象一样,需要有一个不重复,唯一的名字

audit_condition VARCHAR2, --筛选条件比如可以选择哪些符合条件的操作被记录

audit_column VARCHAR2, --表中的某一列,可以只记录对表中某一列的操作.如果不指定表示审计所有的列

handler_schema VARCHAR2, --是下面的handler_module的拥有者,其实也只能是创建policy的用户,而上面的object_schema可以是任意用户

handler_module VARCHAR2,--可以是一个一个存储过程或函数,但监测到任何一条符合条件的操作时执行它.

enable BOOLEAN, --true

或false表示policy是开启或关闭状态,如果是false表示不进行审计

statement_types VARCHAR2, --表示哪些操作将被审计,可以填上select,insert,update,delete中的一个或几个

audit_trail BINARY_INTEGER IN

DEFAULT,--有参数db,xml表示审计到的信息保存到数据库中或是以xml文件形式保存到磁盘上

audit_column_opts BINARY_INTEGER IN DEFAULT);

--这个选项其实只有在audt_column中指定了某列时才起作用.它有any_columns,all_columns两个选项假如表中有

eno,ename两列,并在audit_column中指定了这两列,那么选any_columns表示只要操作其中的任意一列都将被记录,而这里指定

all_columns的话是说只有一个sql语句同时操作了这两列才被记录

sys用户登录,创建一个审计,记录到数据库

-- 记录到db

begin

dbms_fga.add_policy(

object_schema=>'MY_TEST',

object_name=>'T_ACCOUNTS',

policy_name=>'ACCOUNTS_ACCESS',

audit_column =>

'BALANCE',

audit_condition

=> 'BALANCE>10000',

enable =>

true,

statement_types

=> 'select,insert,update,delete',

audit_trail =>

SYS.DBMS_FGA.DB+SYS.DBMS_FGA.EXTENDED);

end;

-- 记录到xml

begin

dbms_fga.add_policy(

object_schema=>'MY_TEST',

object_name=>'T_ACCOUNTS',

policy_name=>'ACCOUNTS_ACCESS',

audit_column =>

'BALANCE',

audit_condition

=> 'BALANCE>10000',

enable =>

true,

statement_types

=> 'select,insert,update,delete',

audit_trail =>

SYS.DBMS_FGA.XML+SYS.DBMS_FGA.EXTENDED);

end;

-- 带处理过程的审计

begin

dbms_fga.add_policy(

object_schema

=> 'MY_TEST',

object_name =>

'T_ACCOUNTS',

policy_name =>

'ACCOUNTS_ACCESS',

audit_condition

=> 'BALANCE>20000',

audit_column =>

'BALANCE',

handler_schema

=> 'MY_TEST',

handler_module

=> 'PRO_ACCOUNTS_HALDER',

enable =>

TRUE,

statement_types

=> 'insert,update,delete',

audit_trail =>

SYS.DBMS_FGA.DB+SYS.DBMS_FGA.EXTENDED);

end;

-- 删除审计

begin

dbms_fga.drop_policy(object_schema=>'MY_TEST',object_name=>'T_ACCOUNTS',policy_name=>'ACCOUNTS_ACCESS');

end;

-- 审计查询表

SELECT * FROM DBA_FGA_AUDIT_TRAIL

-- 删除表自动删除

select * from dba_audit_policies

MY_TEST用户登录

create table t_accounts(id number(10),name varchar2(20),balance

float)

--创建的过程

create or replace procedure pro_accounts_halder(v_object_scheam

varchar2,v_object_name varchar2,v_policy_name varchar2)

as

begin

insert into logs values

(v_object_scheam,v_object_name,v_policy_name);

--commit;(不能commit,前面有介绍)end;

--这里的存储过程有点特殊,它必须带v_object_schema

VARCHAR2, v_object_name VARCHAR2, v_policy_name

VARCHAR2这三个参数才行,如果直接写一个一般的存储过程就会出错

注:sys用户执行的操作不做审计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值