oracle_审计

这篇文章主要简单的讨论一下Oracle的审计功能,包括粗粒度审计、细粒度审计(FGA)

原文: http://blog.csdn.net/xuliq/article/details/51374287

dba_obj_audit_opts:一般的标准审计视图

DBA_AUDIT_POLICIES是细粒度的视图

DBA_AUDIT_POLICIES describes all fine-grained auditing policies in the database. Its columns are the same as those in ALL_AUDIT_POLICIES.

一.粗粒度审计功能。

1.审计级别:
语句级审计(stmt):表示只审计某种类型的SQL语句,不指定结构或对象。
权限级审计(privs):表示只审计执行相应动作的系统权限的使用情况。
实体级审计(obj):表示只对指定模式上的实体指定语句的审计。
    根据用户语句的执行结果,审计语句分为成功语句的审计(Whenever Successful)、不成功语句的审计(Whenever NOT Successful)以及无论成功与否都进行审计(默认情况)。
    根据用户语句的执行次数,审计又分为对某一用户或全体用户的会话(By Session)审计、对某一用户或全体用户存取方式(By Access)的审计。
    某一用户或全体用户的会话审计表示用户语句每执行一次就审计一次;某一用户或全体用户存取方式审计表示相同语句执行多次时,每执行一次就审计一次。
    当数据库的审计功能被启动后,在用户语句执行阶段,系统会自动产生审计信息。审计信息中包括审计的操作、用户执行的操作、操作日期、操作时间等信息。

2.初始化参数:
audit_trail=none|false|db|true|os
none,false效果相同,db,true效果相同,os将结果存放到audit_dump_file参数对应的目录下。
audit_sys_operations=false|true 是否启动对sysdba,sysoper身份的用户的审计。
3.语法:
audit stmt opts|privs opts|obj opts by users by session|access whenever [not] successful;

4.审计类型:
语句级审计
    语句级审计表示只审计某种类型的SQL语句。可以审计某个用户,也可以审计所有用户的SQL语句。语句级审计的语法如下:
AUDIT SQL语句选项 [by 用户名] [by session|access] [whenever [NOT] successful;


语句选项


被审计的语句


CLUSTER


Create Cluster、Audit Cluster、Drop Cluster、Truncate Cluster


DATABASE LINK


Create Database Link、Drop Database Link


DIRECTORY


Create Directory、Drop Directory


INDEX


Create Index、Alter Index、Drop Index


PROCEDURE


Create Function、Create Library、Create Package、Create Package Body、Create Procedure、Drop Function、Drop Library、Drop Package


PROFILE


Create Profile、Alter Profile、Drop Profile


PUBLIC SYNONYM


Create Public Synonym、Drop Public Synonym


ROLE


Create Role、Alter Role、Drop Role、Set Role


ROLLBACK SEGMENT


Create Rollback Segment、Alter Rollback Segment、Drop Rollback Segment


SEQUENCE


Create Sequence、Drop Sequence


SESSION


Connect、Disconnect


SYNONYM


Create Synonym、Drop Synonym


SYSTEM AUDIT


Audit、Noaudit


SYSTEM GRANT


Grant、Revoke


TABLE


Create Table、Drop Table、Truncate Table


TABLESPACE


Create Tablespace、Alter Tablespace、Drop Tablespace


TRIGGER


Create Trigger、Alter Trigger


USERS


Create User、Alter User、Drop User


TYPE


Create Type、Create Type Body、Alter Type、Drop Type、Drop Type Body


VIEW


Create View、Drop View


ALTER SEQUENCE


Alter Sequence


ALTER TABLE


Alter Table


DELETE TABLE


Delete from tables、views


EXECUTE


Execute Function、Library、Package


GRANT SEQUENCE


Grant privilege On sequence、Revoke privilege On sequence


GRANT TABLE


Grant privilege on table、Revoke privilege on table


UPDATE TABLE


Lock Table

在使用时,不需要写出全部的SQL语句,只要写出语句的选项即可。

“by 用户名”表示只审计指定用户的SQL语句,不审计其他用户。没有指出用户名时,则审计全体用户。
audit table by scott; 表示scott用户在执行Create Table、Drop Table、Truncate Table操作时将被审计。
audit table; 表示所有用户执行该类型的语句都被审计。

“by session”表示按会话方式审计,在每个会话中,相同的语句只审计一次。这是系统默认的方式。
“by access”表示按存取方式审计,每一次语句都将审计。
“whenever successful”表示只审计成功语句。
“whenever not successful”表示只审计不成功语句。

audit table by scott by access;(审计scott用户每一次对表的CREATE、DROP、Truncate操作)。
audit table by scott by session;(审计scott用户对表的CREATE、DROP、Truncate操作,相同的操作只记录一次)。
audit session by tax02 by session whenever not successful;(审计tax02用户尝试连接数据库,但不成功的信息,相同的操作只记录一次)。
audit session by tax01,tax02;(审计tax01,tax02用户尝试连接数据库,成功的信息,相同的操作只记录一次)。
audit session whenever not successful;(审计尝试连接数据库,但不成功的信息)。

如果要了解对于哪些用户都进行了语句级审计及审计的选项,可以查询数据字典DBA_STMT_AUDIT_OPTS,该数据字典要以sys用户连接数据库查询。

当不再对用户进行审计时,可以使用noaudit命令,把用户进行的审计取消。
noaudit SQL语句或选项 [by 用户名] [by session|access] [Whenever [NOT] Successful];

权限级审计

权限级审计表示只审计某一个系统权限的使用情况。可以审计某个用户所使用的系统权限,也可以审计所有用户使用的系统权限。权限级审计的语法如下:
Audit 权限名称 [by 用户名] [by session|Access] [Whenever [NOT] Successful];

例如:
audit delete any table whenever not successful;(审计所有用户不成功的DELETE ANY TABLE权限使用情况)。
audit create table whenever not successful;(审计所有用户不成功的CREATE TABLE权限使用情况)。
audit alter any table,alter any procedure by scott by access whenever not successful;
audit create user by tax02 whenever not successful;

如果要了解对哪些用户进行了权限级审计及审计选项,可以查询数据字典DBA_PRIV_AUDIT_OPTS,该数据字典必须以sys用户连接数据库进行查询。
当不再对用户的系统权限进行审计时,可以使用noaudit命令取消对用户所进行的审计。取消用户权限审计的命令如下:
noaudit 权限名称 [by 用户名] [by session|access] [whenever [NOT] Successful];

例如:
noaudit alter any table,alter any procedure by scott by access whenever not successful;
noaudit create user by tax02 whenever not successful;
noaudit create table whenever not successful;

审计停止后,用户所进行的操作将不再记录。

实体级审计

实体审计用于监视所有用户对某一指定用户的表的存取状况。实体级审计是不分审计对象的,数据库管理员关心的重点是哪些用户操作某一个指定用户的表。实体级审计的语法如下:
audit 实体选项 on schema.实体名称 [by session | access] [Whenever [NOT] Successful];

实体级审计中的实体选项及对实体操作的语句


类型   对象


TABLE


VIEW


SEQUENCE


PROCEDURE


SNAPSHOTS


ALTER



 



 


 


DELETE




 


 


 


EXECUTE


 


 


 



 


INDEX



 


 


 


 


INSERT




 


 


 


REFERENCES



 


 


 


 


SELECT





 



UPDATE




 


 


 

例如:
audit delete on scott.emp by access whenever successful;(审计所有用户对scott.emp表所有成功的DELETE操作,每次操作都会记录)
audit delete on scott.dept by access whenever not successful;(审计所有用户对scott.emp表所有不成功的DELETE操作,每次操作都会记录)
audit select on sys.tab;(审计所有用户对sys.tab表的SELECT操作,相同的操作只会记录一次)
audit update on scott.dept;
audit update,delete on hr.employees by access whenever successful;
audit update,delete on hr.employees by user;(对user用户对hr.employees的update,delete进行审计)

如果要了解对哪些用户的实体进行了实体级审计及审计选项,可以查询数据字典DBA_OBJ_AUDIT_OPTS,该数据字典必须以sys用户连接数据库进行查询。例如对于用户scott所进行的实体级审计信息,可以使用以下命令:
select object_name,object_type,alt,aud,com,del,gra,ind,ins,loc,ren,sel,upd,ref,exe,cre,rea,wri from dba_obj_audit_opts where owner=‘SCOTT‘;

“-”表示没有设置该选项的审计。
“S”表示使用by session选项进行审计。
“A”表示使用by access选项进行审计。
“/”表示使用过whenever successful、whenever not successful选项值。

使用noaudit命令取消对用户实体所进行的审计。
例如:
noaudit delete on scott.emp by access whenever successful;
noaudit delete on scott.dept by access whenever not successful;

5.查看审计结果:
dba_audit_trail;
    DBA_AUDIT_TRAIL displays all standard audit trail entries.
dba_audit_session;
   DBA_AUDIT_SESSION displays all audit trail records concerning CONNECT and DISCONNECT.
dba_audit_object;
   DBA_AUDIT_OBJECT displays audit trail records for all objects in the database.

6.查看创建了哪些审计:
dba_obj_audit_opts;(实体级审计)
dba_priv_audit_opts;(权限级审计)
dba_stmt_audit_opts;(语句级审计)

7.取消审计(将原有的audit语句的audit换成noaudit执行即可):
noaudit all;
noaudit all privileges;
noaudit update,delete on table_name [by username];

8.删除审计记录:
delete from sys.aud$ where timestamp#<sysdate-100;

二.细粒度审计(FGA)功能。

细粒度的审计使用DBMS_FGA包完成配置和管理工作。细粒度审计除了审计功能外,还可用于绑定变量值的捕获,下面简单讨论一下DBMS_FGA包的使用:

SQL> desc dbms_fga

PROCEDURE ADD_POLICY

Argument Name                  Type                    In/Out Default?

------------------------------ ----------------------- ------ --------

OBJECT_SCHEMA                  VARCHAR2                IN     DEFAULT

OBJECT_NAME                    VARCHAR2                IN

POLICY_NAME                    VARCHAR2                IN

AUDIT_CONDITION                VARCHAR2                IN     DEFAULT

AUDIT_COLUMN                   VARCHAR2                IN     DEFAULT

HANDLER_SCHEMA                 VARCHAR2                IN     DEFAULT

HANDLER_MODULE                 VARCHAR2                IN     DEFAULT

ENABLE                         BOOLEAN                 IN     DEFAULT

STATEMENT_TYPES                VARCHAR2                IN     DEFAULT

AUDIT_TRAIL                    BINARY_INTEGER          IN     DEFAULT

AUDIT_COLUMN_OPTS              BINARY_INTEGER          IN     DEFAULT

PROCEDURE DISABLE_POLICY

Argument Name                  Type                    In/Out Default?

------------------------------ ----------------------- ------ --------

OBJECT_SCHEMA                  VARCHAR2                IN     DEFAULT

OBJECT_NAME                    VARCHAR2                IN

POLICY_NAME                    VARCHAR2                IN

PROCEDURE DROP_POLICY

Argument Name                  Type                    In/Out Default?

------------------------------ ----------------------- ------ --------

OBJECT_SCHEMA                  VARCHAR2                IN     DEFAULT

OBJECT_NAME                    VARCHAR2                IN

POLICY_NAME                    VARCHAR2                IN

PROCEDURE ENABLE_POLICY

Argument Name                  Type                    In/Out Default?

------------------------------ ----------------------- ------ --------

OBJECT_SCHEMA                  VARCHAR2                IN     DEFAULT

OBJECT_NAME                    VARCHAR2                IN

POLICY_NAME                    VARCHAR2                IN

ENABLE                         BOOLEAN                 IN     DEFAULT

从上面的结构很容易看出,DBMS_FGA包主要包括ADD_POLICY,ENABLE_POLICY,DISABLE_POLICY,和DROP_POLICY这4个存储过程。其中ADD_POLICY是最常用也是最DBMS_FGA包中最复杂的过程,参考下面的内容顺序ADD_POLICY存储过程中参数的含义:

Table 40-2 ADD_POLICY Procedure Parameters

Parameter Description Default Value

object_schema


The schema of the object to be audited. (If NULL, the current log-on user schema is assumed.)


NULL


object_name


The name of the object to be audited.


-


policy_name


The unique name of the policy.


-


audit_condition


A condition in a row that indicates a monitoring condition. NULL is allowed and acts as TRUE.


NULL


audit_column


The columns to be checked for access. These can include hidden columns. The default, NULL, causes audit if any column is accessed or affected.


NULL


handler_schema


The schema that contains the event handler. The default, NULL, causes the current schema to be used.


NULL


handler_module


The function name of the event handler; includes the package name if necessary. This function is invoked only after the first row that matches the audit condition in the query is processed. If the procedure fails with an exception, the user SQL statement will fail as well.


NULL


enable


Enables the policy if TRUE, which is the default.


TRUE


statement_types


The SQL statement types to which this policy is applicable: INSERT, UPDATE, DELETE, or SELECT only.


SELECT


audit_trail


Destination (DB or XML) of fine grained audit records. Also specifies whether to populate LSQLTEXT and LSQLBIND in fga_log$.
<<<< 要想捕获SQL语句和绑定变量值需要设置DBMS_FGA.EXTENDED,默认值即包含该设置,参数设置示例请参考下面的使用注意事项。


DB+EXTENDED


audit_column_opts


Establishes whether a statement is audited when the query references any column specified in the audit_column parameter or only when all such columns are referenced.    <<<< 值有DBMS_FGA.ALL_COLUMNS和DBMS_FGA.ANY_COLUMNS,表示audit_column设置中是满足所有字段捕获还是满足一个字段捕获。


ANY_COLUMNS

使用过程应该注意以下内容:

Usage Notes

  • If object_schema is not specified, the current log-on user schema is assumed.
  • An FGA policy should not be applied to out-of-line columns such as LOB columns.
  • Each audit policy is applied to the query individually. However, at most one audit record may be generated for each policy, no matter how many rows being returned satisfy that policy‘s audit_condition. In other words, whenever any number of rows being returned satisfy an audit condition defined on the table, a single audit record will be generated for each such policy.
  • If a table with an FGA policy defined on it receives a Fast Path insert or a vectored update, the hint is automatically disabled before any such operations. Disabling the hint allows auditing to occur according to the policy‘s terms. (One example of a Fast Path insert is the statement INSERT-WITH-APPEND-hint.)
  • The audit_condition must be a boolean expression that can be evaluated using the values in the row being inserted, updated, or deleted. This condition can be NULL (or omitted), which is interpreted as TRUE, but it cannot contain the following elements:
    • Subqueries or sequences
    • Any direct use of SYSDATE, UID, USER or USERENV functions. However, a user-defined function and other SQL functions can use these functions to return the desired information.
    • Any use of the pseudo columns LEVEL, PRIOR, or ROWNUM.

    Specifying an audit condition of "1=1" to force auditing of all specified statements ("statement_types") affecting the specified column ("audit_column") is no longer needed to achieve this purpose. NULL will cause audit even if no rows were processed, so that all actions on a table with this policy are audited.

  • The audit function (handler_module) is an alerting mechanism for the administrator. The required interface for such a function is as follows:
    PROCEDURE  ( object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2 )  AS ...
    

    where fname is the name of the procedure, object_schema is the name of the schema of the table audited, object_name is the name of the table to be audited, and policy_name is the name of the policy being enforced. The audit function will be executed with the function owner‘s privilege.

  • The audit_trail parameter specifies both where the fine-grained audit trail will be written and whether it is to include the query‘s SQL Text and SQL Bind variable information (typically in columns named LSQLTEXT and LSQLBIND):
    • If audit_trail includes XML, then fine-grained audit records are written to XML-format operating system files stored in the directory specified by an AUDIT_FILE_DEST statement in SQL. (The default AUDIT_FILE_DEST is $ORACLE_BASE/admin/$DB_UNIQUE_NAME/adump on Unix-based systems, and $ORACLE_BASE\admin\$DB_UNIQUE_NAME\adump on Windows systems.)
    • If audit_trail includes DB instead, then the audit records are written to the SYS.FGA_LOG$ table in the database.
    • If audit_trail includes EXTENDED, then the query‘s SQL Text and SQL Bind variable information are included in the audit trail.
    • For example:
      • Setting audit_trail to DBMS_FGA.DB sends the audit trail to the SYS.FGA_LOG$ table in the database and omits SQL Text and SQL Bind.
      • Setting audit_trail to DBMS_FGA.DB + DBMS_FGA.EXTENDED sends the audit trail to the SYS.FGA_LOG$ table in the database and includes SQL Text and SQL Bind.
      • Setting audit_trail to DBMS_FGA.XML writes the audit trail in XML files sent to the operating system and omits SQL Text and SQL Bind.
      • Setting audit_trail to DBMS_FGA.XML + DBMS_FGA.EXTENDED writes the audit trail in XML files sent to the operating system and includes SQL Text and SQL Bind.

    The audit_trail parameter appears in the ALL_AUDIT_POLICIES view.

  • You can change the operating system destination using the following command:

    ALTER SYSTEM SET AUDIT_FILE_DEST = ‘‘ DEFERRED

  • On many platforms, XML audit files are named _.xml, for example, ora_2111.xml, or s002_11.xml. On Windows, the XML audit files are named _.xml (or _ProcessId>.xml if the process is not running as a thread).
  • The audit_column_opts parameter establishes whether a statement is audited
    • when the query references any column specified in the audit_column parameter (audit_column_opts = DBMS_FGA.ANY_COLUMNS), or
    • only when all such columns are referenced (audit_column_opts = DBMS_FGA.ALL_COLUMNS).

    The default is DBMS_FGA.ANY_COLUMNS.

    The ALL_AUDIT_POLICIES view also shows audit_column_opts.

  • When audit_column_opts is set to DBMS_FGA.ALL_COLUMNS, a SQL statement is audited only when all the columns mentioned in audit_column have been explicitly referenced in the statement. And these columns must be referenced in the same SQL-statement or in the sub-select.

    Also, all these columns must refer to a single table/view or alias.

    Thus, if a SQL statement selects the columns from different table aliases, the statement will not be audited.

下面介绍几个最常用的初始化参数和视图:

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

注意:
        启用细粒度的审计功能不需要设置数据库的AUDIT_TRAIL初始化参数,只需要设置DBMS_FGA.ADD_POLICY存储过程中的AUDIT_TRAIL参数或使用默认值即可。

参考文章:《【实验】【审计】【FGA】使用Oracle的审计功能监控数据库中的可疑操作》:http://space.itpub.net/519536/viewspace-613323

三.Oracle数据对SYS用户的审计以及11g默认开启的审计功能。

参考文章:
        《Oracle 11gR2 Database和ASM默认的审计策略和相关操作》:http://space.itpub.net/23135684/viewspace-723442

--end--

时间: 2024-11-10 11:23:04

oracle_审计的相关文章

ABP官方文档翻译 4.6 审计日志

审计日志 介绍 关于IAuditingStore 配置 通过特性启用/禁用 注意事项 介绍 维基百科:“审计追踪(也称为审计日志)是与安全相关的按时间先后的记录.记录集合.记录的目的地和源,提供一系列活动的纪实证据,这些活动可能在任何时刻影响一个特定操作.过程或事件.” ABP提供了基础设施自动记录应用所有的交互.它可以记录方法调用的调用者和参数. 基本上,保存的字段有:相关的tenant id,调用者user id,调用者service name(调用方法的类),调用者method name,

数据库内置审计功能

作为一名dba,有时候,总会遇到数据库某个库,某个表,某个字段异常,或者数据被莫名的删除了,这个时候大家各种推断是不是bug了啊,是不是被黑了啊...这个时候一个审计功能就凸显出来了. mariadb数据库对审计插件(server_audit.so)支持比较良好,今天我们进行一个简单安装和测试 安装方法也很简单:INSTALL SONAME "server_audit.so" 这样就安装完成了,我们可以看看对应的参数变量 这些参数和变量都是可以动态设置的,具体参数说明,见官网:http

SQL Server 审计功能-记录所有的操作记录

SQL Server 审计-记录所有的操作记录 说到审计这个话题,相信作为一个企业管理员都知道,比如一般作为一个AD管理员的话,一般都会通过Policy开启审计功能,记录一些自定义的事务日志.对于SQL Server来说,审计也是一样的,SQL Server审计对象收集单个实例的服务器或数据库级的动作和行为监控组. 审计是在SQL Server实例级. 可以有多个审计/ SQL服务器实例.当你定义一个审计,你指定位置的输出结果. 这是审计目标. 审计是在创建的禁用状态,不会自动审计任何行动. 启

0816关于MySQL的审计 init-connect+binlog实现用户操作追踪

转自:http://blog.sina.com.cn/s/blog_605f5b4f01013xkv.html mysql 用init-connect+binlog实现用户操作追踪 做access 的ip的log 记录 在MYSQL中,每个连接都会先执行init-connect,进行连接的初始化.我们可以在这里获取用户的登录名称和thread的ID值.然后配合binlog,就可以追踪到每个操作语句的操作时间,操作人等.实现审计. 实验过程:1:创建登录日志库,登录日志表 CREATE DATAB

对VAuditDemo的一次审计

拿到代码,首先先观察index.php入口文件. 1 <?php 2 require_once('sys/config.php'); 3 require_once('header.php'); 4 ?> 5 <div class="row"> 6 <?php 7 /* Include */ 8 if (isset($_GET['module'])){ 9 include($_GET['module'].'.inc'); 10 }else{ 11 ?>

Kafka端到端审计

概述 Kafka端到端审计是指生产者生产的消息存入至broker,以及消费者从broker中消费消息这个过程之间消息个数及延迟的审计,以此可以检测是否有数据丢失,是否有数据重复以及端到端的延迟等. 目前主要调研了3个产品: Chaperone (Uber) Confluent Control Center(非开源,收费) Kafka Monitor (LinkedIn) 对于Kafka端到端的审计主要通过: 消息payload中内嵌时间戳timestamp 消息payload中内嵌全局index

使用Trigger审计一张表的DML操作

最近ogg的灾备端复制进程中的一张表老是报错ORA-04031,但是又查不到原因,于是想用审计的方法来看到底这张表是被谁做了DML操作,把数据搞没了.本来想用数据库自带的审计功能参考:http://hbxztc.blog.51cto.com/1587495/1870181 但是需要重启数据库,就放弃了,上网查资料看到有人用触发器来实现这个功能,于是自己也做了尝试. 平台11.2.0.4 [email protected]>select * from v$version; BANNER -----

mariadb操作审计

mariadb可以启用审计插件来对数据库的各种操作进行审计,以防运维背锅! 启用MariaDB的审计插件,并调整相关参数 MariaDB [(none)]> show variables like '%audit%'; Empty set (0.02 sec) 安装MariaDB审计插件 MariaDB [(none)]> INSTALL PLUGIN server_audit SONAME 'server_audit'; Query OK, 0 rows affected (0.41 sec

mysql审计插件设置

1.create database auditdb use auditdb 2.create table accesslog(ID int primary key auto_increment,ConnectionID int,ConnUser varchar(30),MatchUser varchar(30),LoginTime datetime) 3.保证所有连接用户对此表有写入权限 insert into mysql.db(Host,Db,User,Insert_priv) values