本文主要展示“如何在Oracle中使用FGA函数”,简单易懂,组织清晰,希望能帮你解惑。让边肖带领大家学习《如何在甲骨文中使用FGA函数》一文。
你可能对trigger很熟悉,但是Oracle也有一个叫FGA的功能,和trigger类似,但是功能更强大。它的全称是细粒度审计。是一种特殊的审计方式。使用FGA只需要调用甲骨文的包DBMS_FGA。ADD_POLICY创建一些策略(审计策略)。每个策略只能针对一个表或视图。在建立策略后,可以记录表或视图上的所有DML操作(选择、插入、更新、删除),当然,可以添加一些过滤条件来监控一些特殊操作。
补充:所谓审核就是记录你的任意操作。如果你的操作(执行DML语句)满足指定条件,你执行的sql语句会被记录在sys user下的一些表中,还有你的其他信息,比如执行时间、用户名、你使用的工具、机器名称等。
FGA存在于oracle 9i中,但只有选择的报表可以在9i中审计。所有DML操作只能从10g开始审核。
1.FGA软件包的使用。ADD_POLICY
创建审计策略的语法
FGA数据库管理系统。ADD_POLICY(
Object_schema VARCHAR2,- schema模式的名称,表或视图的所有者
Object_name VARCHAR2,-对象的名称,表或视图的名称
Policy _ namevarchar2,-审核策略的名称,与数据库中的其他对象一样,它需要具有唯一的名称。
Audit_condition VARCHAR2,-过滤标准,例如可以选择记录哪些合格的操作。
Audit _ ColumnVarchar2,-表中的一列,只能记录对表中一列的操作。如果未指定,将审核所有列。
下面的Handler_schema VARCHAR2,handler _ module的所有者只能是创建策略的用户,而上面的object_schema可以是任何用户。
Handler _ module varchar2,-可以是存储过程或函数,但它将在检测到任何合格操作时执行。
Enable BOOLEAN,- true或false表示策略打开或关闭,false表示不进行审核。
Statement_types VARCHAR2,-指示将审核哪些操作,您可以填写select、insert、update和delete中的一个或多个。
Audit _ trail binary _ integer默认情况下,-有一个参数db,xml表示被审计的信息以XML文件的形式保存到数据库或者保存到磁盘。
audit _ column _ opts BInary _ INTEGER IN DEFAULT);-事实上,此选项仅在audt_column中指定了列时有效。它有两个选项,any_columns和all_columns。如果表中有eno、eno和ename列,并且这两列是在audit_column中指定的,那么选择any _ columns意味着对任何列的任何操作都将被记录,而在这里指定all _ columns意味着只有一条sql语句同时操作这两列。
例如,假设您创建了表:创建表温度(埃纳姆瓦尔恰尔2(30));为此表创建策略
每个策略只能针对一个表或视图,一个表或视图可能对应多个策略。删除表时,默认情况下会删除策略
开始
系统。FGA数据库管理系统。ADD_POLICY(
object_schema='ARWEN '
,对象名='TEMP '
,策略名称
=> 'FGA_TEMP'
,audit_condition => NULL
,audit_column => eno,ename
,handler_schema => null
,handler_module => null
,enable => TRUE
,statement_types =>'SELECT,INSERT,UPDATE,DELETE'
,audit_trail => SYS.DBMS_FGA.DB+SYS.DBMS_FGA.EXTENDED
--DBMS_FGA.DB表示记录将被保存到数据库中,DBMS_FGA.EXTENDED表示如果sql语句中带有绑定变量也会被记录下来.
--如果是这样选audit_trail => SYS.DBMS_FGA.DB表示不会记录绑定变量
--SYS.DBMS_FGA.DB+SYS.DBMS_FGA.EXTENDED改成SYS.DBMS_FGA.XML+SYS.DBMS_FGA.EXTENDED表示记录保存成xml文件
--xml文件所在目录可以通过SHOW PARAMETER AUDIT_FILE_DEST查看,如果要更改目录ALTER SYSTEM SET AUDIT_FILE_DEST = directory_path DEFERRED;
,audit_column_opts => SYS.DBMS_FGA.ALL_COLUMNS)
END;
查看创建好的policy对象和符合审计条件时被记录的操作
我们可以通过select * from dba_objects查看table,view等对象,类似的policy创建好后我们可以通过SELECT * FROM DBA_AUDIT_POLICIES来查看.
如果我们对表temp执行了DML操作,那些信息将会被操作到sys用户下的表中,Select* from sys.dba_fga_audit_trail可以查找到.(注意这只有前面设置将记录信息
保存到数据库才能这样查,如果保存到xml文件中可以Select *from V$XML_AUDIT_TRAIL)
2.删除审计策略,假如删除上面创建的策略
begin
SYS.DBMS_FGA.DROP_POLICY (
object_schema => 'ARWEN'
,object_name => 'TEMP'
,policy_name => 'FGA_TEMP'
);
end;
3.使用handler_module
假如你想在审计到某些操作时还进行进一步的处理,比如把信息写到自己创建的日志中,或者发送邮件通知相关人员.就要在创建policy时使用handler_module的功能,指定一个存储过程去做相应的处理.假如我创建一个存储过程temp_handler
CREATE OR REPLACE PROCEDURE temp_handler
( v_object_schema VARCHAR2
, v_object_name VARCHAR2
, v_policy_name VARCHAR2
)
IS
v_temp varchar2(30);
begin
null;
end temp_handler;
--这里的存储过程有点特殊,它必须带v_object_schema VARCHAR2, v_object_name VARCHAR2, v_policy_name VARCHAR2这三个参数才行,如果直接写一个一般的存储过程就会出错的.在policy中调用存储过程就这样 写
BEGIN
SYS.DBMS_FGA.ADD_POLICY (
object_schema => 'ARWEN'
,object_name => 'TEMP'
,policy_name => 'FGA_TEMP'
,audit_condition => NULL
,audit_column => eno,ename
,handler_schema =>'ARWEN' --注意此处的用户只能是创建此policy的用户,如果是其他用户名会出错的
,handler_module => 'TEMP_HANDLER'
,enable => TRUE
,statement_types =>'SELECT,INSERT,UPDATE,DELETE'
,audit_trail => SYS.DBMS_FGA.DB+SYS.DBMS_FGA.EXTENDED
,audit_column_opts => SYS.DBMS_FGA.ALL_COLUMNS)
END;
与FGA相关的表或者视图:
select * from fga$
select * from fga_log$
select * from fgacol$
select * from dba_fga_audit_trail
select * from dba_common_audit_trail
select * from dba_audit_policies
select * from dba_fga_audit_trail
与FGA相关的包或者过程:
dbms_fga.add_policy
dbms_fga.drop_policy
表、视图、包的列或者参数的使用方法,可以查看相关文档。
以上是“Oracle中FGA功能怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/153553.html