首页 > 数据库 >Oracle审计篇——细粒度审计

Oracle审计篇——细粒度审计

时间:2023-04-18 10:39:42浏览次数:56  
标签:审计 audit 细粒度 object POLICY Oracle FGA name


Oracle的标准审计默认级别是DB,这个级别不会记下具体sql语句是什么,如果需要记下需要开到DB,extended,但是改这个参数需要重启数据库生效,影响业务。

SQL> show parameter audit_trail

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_trail                          string      DB

可以用细粒度审计来完成这个需求。启用细粒度审计只需要设置DBMS_FGA.ADD_POLICY存储过程,AUDIT_TRAIL使用默认值即可。

以下是一个简单的审计指定表增删改操作

BEGIN
DBMS_FGA.ADD_POLICY(OBJECT_SCHEMA  => 'TEST',
           OBJECT_NAME   => 'TEST_INDEX',
           POLICY_NAME   => 'TEST_INDEX_POL',
           ENABLE     => TRUE,
           STATEMENT_TYPES => 'INSERT,UPDATE,DELETE'); -- 可选增删改查操作,不指定则全部审计
END;
/

查询审计策略

SELECT * FROM dba_audit_policies;
SELECT * FROM dba_audit_policy_columns;

查询审计结果

select d.timestamp,d.db_user,d.os_user,d.userhost,d.object_schema,d.object_name,d.sql_text,d.sql_bind from dba_fga_audit_trail d
--where d.statement_type<>'SELECT'
order by 1

清空细粒度审计记录

truncate table sys.fga_log$;

细粒度审计可以指定很多复杂的规则,例如指定列和条件:

begin
dbms_fga.add_policy(
object_schema=>'HR',
object_name=>'EMPLOYEES',
policy_name=>'AUDI_SAL_EMP ',
audit_condition=>'salary is not null and commission_pct is not null', -- -- 指定审计条件
audit_column=>'salary,commission_pct', -- 指定列
enable=>true,
statement_types=>'select'); -- 审计类型
end;
/

ADD_POLICY Procedure

begin
DBMS_FGA.ADD_POLICY(
   object_schema      IN  VARCHAR2 DEFAULT NULL, 
   object_name        IN  VARCHAR2, 
   policy_name        IN  VARCHAR2, 
   audit_condition    IN  VARCHAR2 DEFAULT NULL, 
   audit_column       IN  VARCHAR2 DEFAULT NULL, 
   handler_schema     IN  VARCHAR2 DEFAULT NULL, 
   handler_module     IN  VARCHAR2 DEFAULT NULL, 
   enable             IN  BOOLEAN DEFAULT TRUE, 
   statement_types    IN  VARCHAR2 DEFAULT SELECT,
   audit_trail        IN  BINARY_INTEGER DEFAULT NULL,
   audit_column_opts  IN  BINARY_INTEGER DEFAULT ANY_COLUMNS,
   policy_owner       IN  VARCHAR2 DEFAULT NULL);
end;
/

例如

DBMS_FGA.ADD_POLICY (
   object_schema      =>  'scott', 
   object_name        =>  'emp', 
   policy_name        =>  'mypolicy1', 
   audit_condition    =>  'sal < 100', 
   audit_column       =>  'comm,sal', 
   handler_schema     =>   NULL, 
   handler_module     =>   NULL, 
   enable             =>   TRUE, 
   statement_types    =>  'INSERT, UPDATE', 
   audit_column_opts  =>   DBMS_FGA.ANY_COLUMNS,
   policy_owner       =>  'sec_admin);

DISABLE_POLICY Procedure

begin
DBMS_FGA.DISABLE_POLICY (
object_schema   =>  'scott',
object_name     =>  'emp',
policy_name     =>  'mypolicy1');
end;
/

DROP_POLICY Procedure

begin
DBMS_FGA.DROP_POLICY (
object_schema   =>  'scott',
object_name     =>  'emp',
policy_name     =>  'mypolicy1');
end;
/

ENABLE_POLICY Procedure

begin
DBMS_FGA.ENABLE_POLICY (
object_schema    =>  'scott',
object_name      =>  'emp',
policy_name      =>  'mypolicy1',
enable           =>   TRUE);
end;
/

具体含义参考

DBMS_FGA

常用视图

  • SYS.FGA_LOG$:基表。如果audit_trail参数包含DB,审计记录会被记录在FGA_LOG$表中。
  • V$XML_AUDIT_TRAIL:如果audit_trail参数包含XML,审计记录会记录在AUDIT_FILE_DEST初始化参数指定的目的地下的XML文件中,Oracle会读取这些XML文件,生成V$XML_AUDIT_TRAIL动态性能视图,方便DBA查看审计详细信息。
  • DBA_AUDIT_POLICIES:详细记录了审计配置的策略信息。
  • DBA_FGA_AUDIT_TRAIL:查看到审计的SQL语句和绑定变量。
  • DBA_COMMON_AUDIT_TRAIL:包含V$XML_AUDIT_TRAIL动态性能视图的内容,是标准和细粒度审计记录。

标签:审计,audit,细粒度,object,POLICY,Oracle,FGA,name
From: https://blog.51cto.com/u_13631369/6202529

相关文章

  • 如何查看Oracle加密代码
    例如我们想看看dbms_pdb.cleanup_task这个函数的内容是什么,直接看会发现只能看到声明,代码是加密的可以把加密后的代码粘出来解密https://www.codecrete.net/UnwrapIt/解密后找到cleanup_task对应部分查了下PRAGMAINTERFACE(C,KPDBCLEANUPTASK);意思是调用C语言的内部代码,更深一层......
  • oracle 为sql寻找更好的执行计划并绑定
    这种方法只适合sql本身有更好的执行计划,不能绑定自己构造的执行计划(比如加hint),并且每次只能针对一个sql_id,如果慢sql未使用绑定变量导致有很多类似sql最好从索引、sql改写等方面优化。首先找到慢sql的sql_id,查看其各执行计划平均执行时间--可用v$active_session_history,dba_hist_a......
  • Oracle授予普通用户kill session权限
    开发A在测试环境操作时有时会遇到阻塞问题,需要找DBA帮忙查看阻塞会话及killsession,后来觉得太麻烦想要个kill会话的权限,查了下Oracle授予普通用户killsession权限的方法。1.授予altersystem权限官方文档查到,killsession需要ALTERSYSTEM权限,但是这个权限非常大,不能直接给GRANT......
  • kettle工具如何使用service_name连接oracle
    开发反馈使用kettle工具连pdb连不上,报错如下: Causedby:org.pentaho.di.core.exception.KettleDatabaseException:Errorconnectingtodatabase:(usingclassoracle.jdbc.driver.OracleDriver)Listenerrefusedtheconnectionwiththefollowingerror:ORA-12505,TNS:l......
  • Oracle 恢复之using backup controlfile 和 until cancel
    Oracle恢复数据库时有几个常用但非常相似的命令,整理下它们各自的作用及适用场景。recoverdatabaserecoverdatabaseuntilcancelrecoverdatabaseusingbackupcontrolfilerecoverdatabaseusingbackupcontrolfileuntilcancelrecoverdatabaseuntilcancelusingbackupc......
  • Oracle 利用在线重定义进行分区表转换
    例如原始非分区表为createtableTESTUSER.LOG_TEST("id"CHAR(36)primarykey,"created_at"DATE)一、选择重定义方法   Bykey,选择主键或者所有字段有NOTNULL约束的唯一键用于在线重定义操作。使用这种方法,在线重定义之前和之后表应该有相同的主键字段(默......
  • Oracle Dataguard安装先决条件与注意事项
    业务方要求把一个单实例DB做成dg,由于之前是业务方自己安装管理的,过去检查一番,发现这个库软件居然不是企业版的。整理了几篇相关的官方文档链接给业务方,反馈Oracle标准版不支持dg。顺便也根据官方文档(19c)整理一份checklist,方便以后使用。一、硬件与OS要求1.主库与所有从库安装版本......
  • oracle、达梦数据库、MySQL数据创建表与字段注释
    /**1.oracle注释*//*表本身注释*/commentontable表名is'注释信息';/*字段注释*/commentoncolumn表名.字段名is'注释信息';/*实例如下:*/commentontableUSERis'用户表';commentoncolumnUSER.IDis'主键ID';/**2.MySQL注释*//*表本身注释*/altertable表名co......
  • Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法
    首先看看官方文档中的描述Thiswaiteventindicatesthataserverprocesswasunabletofindafreebufferandhaspostedthedatabasewritertomakefreebuffersbywritingoutdirtybuffers.Adirtybufferisabufferwhosecontentshavebeenmodified.Dirtyb......
  • Oracle create index 中途取消后应该如何处理
        有时会遇到这样的情况,在创建索引的过程中啪叽网断了,会话中断;或者创建索引时觉得执行太慢,直接按了crtl+c取消,直接把运行窗口关了...尝试重新建索引的时候会遇到报错ORA-00095索引名已存在,而dropindex时又报错ORA-08104 thisindex isbeingonlinebuiltorrebuilt......