千家信息网

Oracle中FGA功能怎么用

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要为大家展示了"Oracle中FGA功能怎么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Oracle中FGA功能怎么用"这篇文章吧。大家对t
千家信息网最后更新 2026年10月31日Oracle中FGA功能怎么用

这篇文章主要为大家展示了"Oracle中FGA功能怎么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Oracle中FGA功能怎么用"这篇文章吧。



大家对trigger可能比较熟悉,但Oracle还有一个叫FGA的功能,它的作用和trigger类似,但功能更强大.它的全称是Fine-Grained Audit ,是Audit的一种特殊方式.使用FGA只要调用Oracle的包DBMS_FGA.ADD_POLICY创建一些policy(审计策略)就行.每个policy只能针对一个表或视图.建好策略后所有对表或视图的DML操作(select,insert,update,delete都可以记录到,当然也可以添加一些筛选条件只监测某些特殊的操作.
补充:所谓审计就是记录你的任意操作,假如你的操作(执行DML语句)符合指定的条件,则你执行的sql语句,将被记录到sys用户下的一些表中,还会将你的其他信息,比如执行时间,用户名,通过什么工具,机器名等.
FGA在oracle 9i中就有了,但在9i中只能审计select语句.从10g开始才能审计所有的DML操作

1.包DBMS_FGA.ADD_POLICY的用法

创建审计策略的语法
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语句同时操作了这两列才被记录

举例,假如创建表:create table temp(eno int,ename varchar2(30));针对这个表创建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 => 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功能怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

审计 策略 用户 视图 过程 功能 条件 存储 信息 语句 名字 对象 数据 数据库 文件 特殊 内容 参数 只有 可以通过 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网黑科技 云信互联网科技有限公司 中关村互联网科技集团 互联网科技卖菜 重庆互联网络科技 奇酷互联网络科技 大白互联网科技 成都狮子座互联网科技 深圳卡尔迅互联网科技有限公司怎么样 海南购全球互联网科技 湖南洣水互联网科技有限公司扣款 互联网科技教育视频 荆州市昕露互联网络科技有限公司 黑科技闪耀互联网之光 杭州壁岐互联网科技有限公司 电子科技大学互联网创业大赛 华夏恒生互联网科技013171 四川慕妮娅互联网科技有限公司 江苏苏星互联网科技有限公司 杭州融税互联网科技有限公司 云南咖啡 南京欣网互联网络科技有限公司 国智互联网科技 青岛互联网科技公司 互联网 新科技 撒么互联网科技公司 中国最先进互联网科技公司 特约风豹互联网科技为什么扣费 江苏苏星互联网科技有限公司 美国五大互联网科技公司市值多少
0