zoukankan      html  css  js  c++  java
  • ORACLE AUDIT

     

    Oracle 作者:Davis_itpub 时间:2018-06-27 16:28:39  61  0

    审计(Audit)用于监视用户所执行的数据库操作,并且Oracle 会将审计跟踪结果存放到OS 文件(默认位置为$ORACLE_BASE/admin /$ORACLE_SID/adump/),或数据库(存储在system 表空间中的SYS.AUD$表中,可通过视图dba_audit_trail 查看)中。审计可以提供有用的信息,用于揭示权限的滥用和误用。当需要一定的粒度时,DBA 可以使用细粒度的审计来监控对表中某些行或列的访问,而不仅仅是是否访问表。

     

    在oracle 11g 中,审计功能(AUDIT_TRAIL)是默认开启的。审计数据默认存放SYSTEM 表空间下的AUD$审计字典基表上。开启审计数据库会增加消耗,降低业务性能,因此,如果不是很必要,在安装好数据库后,可适当选择关闭数据库审计功能。

     

    Oracle 公司还推荐使用基于OS 文件的审计日志记录方式(OSaudit trail files),当AUDIT_TRAIL 设置为OS 时,审计记录文件将在AUDIT_FILE_DEST 参数所指定的目录中生成。

     

    一、审计类型

    语句审计

    按照语句类型审计SQL 语句,而不论访问何种特定的模式对象。也可以在数据库中指定一个或多个用户,针对特定的语句审计这些用户

    权限审计

    审计系统权限,例如CREATE TABLE 或ALTER INDEX。和语句审计一样,权限审计可以指定一个或多个特定的用户作为审计的目标

    模式对象审计

    审计特定模式对象上运行的特定语句(例如,DEPARTMENTS 表上的UPDATE 语句)。模式对象审计总是应用于数据库中的所有用户

    细粒度的审计

    根据访问对象的内容来审计表访问和权限。使用程序包DBMS_FGA 来建立特定表上的策略

     

    二、审计位置

    审计记录可以发送到SYS.AUD$数据库表或操作系统文件。为了启用审计并指定记录审计记录的位置,将初始参数AUDIT_TRAIL 设置为如下几个值之一:

    NONE, FALSE

     禁用审计

    OS

    启用审计将审计记录发送到操作系统文件

    DB, TRUE

     启用审计,将审计记录发送到SYS.AUD$表

    DB_EXTENDED

    启用审计,将审计记录发送到SYS.AUD$表,并在CLOB 列SQLBIND 和SQLTEXT 中记录额外的信息

    XML

     启用审计,以XML 格式写所有审计记录

    EXTENDED

     启用审计,在审计跟踪中记录所有列,包括SqlText 和SqlBind 的值

     

    参数AUDIT_TRAIL 不是动态的,为了使AUDIT_TRAIL 参数中的改动生效,必须关闭数据库并重新启动。在对SYS.AUD$表进行审计时,应该注意监控该表的大小,以避免影响SYS 表空间中其他对象的空间需求。推荐周期性归档SYS.AUD$中的行,并且截取该表。

     

    在Oracle11g 中CREATE SESSION 作为受审计的权限来被记录,因此当SYSTEM 表空间因磁盘空间而无法扩展时将导致这部分审计记录无法生成,这将最终导致普通用户的新会话将无法正常创建,普通用户将无法登陆数据库。在这种场景中仍可以使用SYSDBA 身份的用户创建会话,在将审计数据合适备份后删除一部分记录,或者TRUNCATE AUD$都可以解决上述问题。在默认情况下会以AUTOEXTEND ON 自动扩展选项创建SYSTEM 表空间,因此系统表空间在必要时会自动增长,我们所需注意的是磁盘上的剩余空间是否能够满足其增长需求,以及数据文件扩展的上限,对于普通的8k smallfile 表空间而言单个数据文件的最大尺寸是32G。

     

    三、开户审计功能

    SQL> alter system set audit_trail=db_extended scope=spfile;

    重启数据库生效:

    SQL> startup force

     

    四、语句审计:

    对于语句审计,audit 命令的格式看起来如下所示:

    AUDIT sql_statement_clause BY {SESSION |ACCESS}WHENEVER [NOT] SUCCESSFUL;

    参数如下:

    sql_statement_clause 包含很多条不同的信息,例如希望审计的SQL 语句类型以及审计什么人。

    by access 在每次动作发生时都对其进行审计,by session 只审计一次。默认是by session。

    whenever successful 审计成功的动作:没有生成错误消息的语句。

    whenever not successful 审计语句的命令是否失败

     

    对于大多数类别的审计方法,如果确实希望审计所有类型的表访问或某个用户的任何权限,则可以指定all 而不是单个的语句类型或对象。

     

    表1-1 列出了可以审计的语句类型,并且在每个类别中包含了相关语句的简要描述。如果指定all,则审计该列表中的任何语句。然而,表1-2 中的语句类型在启用审计时不属于all 类别;必须在audit 命令中显式地指定它们。

     

    表1-1 包括在ALL 类别中的可审计语句

     句 选 项

    SQL 操作

    ALTER SYSTEM

    所有ALTER SYSTEM 选项,例如,动态改变实例参

    数,切换到下一个日志文件组,以及终止用户会话

    CLUSTER

    CREATE、ALTER、DROP 或TRUNCATE 集群

    CONTEXT

    CREATE CONTEXT 或DROP CONTEXT

    DATABASE LINK

    CREATE 或DROP 数据库链接

    DIMENSION

    CREATE、ALTER 或DROP 维数

    DIRECTORY

     CREATE 或DROP 目录

    INDEX

    CREATE、ALTER 或DROP 索引

    MATERIALIZED VIEW

    CREATE、ALTER 或DROP 物化视图

    NOT EXISTS

    由于不存在的引用对象而造成的SQL 语句的失败

    PROCEDURE

     CREATE 或DROP FUNCTION、LIBRARY、PACKAGE、

    PACKAGE BODY PROCEDURE

    PROFILE

     CREATE、ALTER 或DROP 配置文件

    PUBLIC DATABASE LINK

    CREATE 或DROP 公有数据库链接

    PUBLIC SYNONYM

     CREATE 或DROP 公有同义词

    ROLE

    CREATE、ALTER、DROP 或SET 角色

    ROLLBACK

    SEGMENT CREATE、ALTER 或DROP 回滚段

    SEQUENCE

     CREATE 或DROP 序列

    SESSION

     登录和退出

    SYNONYM

     CREATE 或DROP 同义词

    SYSTEM

     AUDIT 系统权限的AUDIT 或NOAUDIT

    SYSTEM GRANT

     GRANT 或REVOKE 系统权限和角色

    TABLE

    CREATE、DROP 或TRUNCATE 表

    TABLESPACE

     CREATE、ALTER 或DROP 表空间

    TRIGGER

     CREATE、ALTER(启用/禁用)、DROP 触发器;具有

    ENABLE ALL TRIGGERS DISABLE ALL

    TRIGGERS ALTER TABLE

    TYPE

    CREATE、ALTER 和DROP 类型以及类型主体

    USER

    CREATE、ALTER 或DROP 用户

    VIEW

    CREATE 或DROP 视图

     

     

     

    表1-2 显式指定的语句类型

     句 选 项

    SQL 操 作

    ALTER SEQUENCE

     任何ALTER SEQUENCE 命令

    ALTER TABLE

    任何ALTER TABLE 命令

    COMMENT TABLE

     添加注释到表、视图、物化视图或它们中的任何列

    DELETE TABLE

     删除表或视图中的行

    EXECUTE PROCEDURE

     执行程序包中的过程、函数或任何变量或游标

    GRANT DIRECTORY

     GRANT 或REVOKE DIRECTORY 对象上的权限

    GRANT PROCEDURE

     GRANT 或REVOKE 过程、函数或程序包上的权限

    GRANT SEQUENCE

    GRANT 或REVOKE 序列上的权限

    GRANT TABLE

     GRANT 或REVOKE 表、视图或物化视图上的权限

    GRANT TYPE

     GRANT 或REVOKE TYPE 上的权限

    INSERT TABLE

     INSERT INTO 表或视图

    LOCK TABLE

     表或视图上的LOCK TABLE 命令

    SELECT SEQUENCE

     引用序列的CURRVAL 或NEXTVAL 的任何命令

    SELECT TABLE

     SELECT FROM 表、视图或物化视图

    UPDATE TABLE

     在表或视图上执行UPDATE

     

    注意:

    从Oracle Database 11g 开始,只有在初始参数AUDIT_TRAIL 被设置为DB_EXTENDED 时,才填充DBA_AUDIT_TRAIL 中的列SQL_TEXT 和SQL_BIND。默认情况下,AUDIT_TRAIL 的值是DB。

     

    示例

    [oracle@ocp Desktop]$ rlwrap sqlplus / as sysdba

    SYS@orcl>show parameter audit_trail

    SYS@orcl> alter system set audit_trail=db_extended

    scope=spfile;

    SYS@orcl> startup force

    SYS@orcl>show parameter audit_trail

    SYS@orcl> alter user scott account unlock identified by

    scott;

    SYS@orcl> audit create table by scott by access;

    SYS@orcl>select user_name,audit_option,success,failure from

    dba_stmt_audit_opts where user_name='SCOTT';

    SYS@orcl> conn scott/scott

    SCOTT@orcl> create table tt(id int);

    SCOTT@orcl> conn / as sysdba

    SYS@orcl>select username,to_char(timestamp,'MM/DD/YY

    HH24:MI') Timestamp,obj_name, action_name, sql_text from

    dba_audit_trail where username= 'SCOTT';

     

    使用noaudit 命令关闭审计,如下所示:

    SYS@orcl> noaudit create table by scott;

    SYS@orcl> conn scott/scott

    SCOTT@orcl> create table ee(id int);

    SCOTT@orcl> conn / as sysdba

    SYS@orcl>select username,to_char(timestamp,'MM/DD/YY

    HH24:MI') Timestamp,obj_name, action_name, sql_text from

    dba_audit_trail where username= 'SCOTT';

     

    五、权限统计

    审计系统权限具有与语句审计相同的基本语法,但审计系统权限是在sql_statement_clause 中,而不是在语句中,指定系统权限。

     

    例如,将ALTER TABLESPACE 权限授予所有的DBA,生成审计记录。启用对这种权限的审计的命令:

    audit alter tablespace by access whenever successful;

    每次成功使用ALTER TABLESPACE 权限时,都会将一行内容添加到SYS.AUD$。

     

    使用SYSDBA 和SYSOPER 权限或者以SYS 用户连接到数据库的系统管理员可以利用特殊的审计。为了启用这种额外的审计级别,可以设置初始参数AUDIT_SYS_OPERATIONS 为TRUE。这种审计记录发送到与操作系统审计记录相同的位置。当使用其中一种权限时执行的所有SQL 语句,以及作为用户SYS 执行的任何SQL 语句,都会发送到操作系统审计位置。

     

    SYS@orcl> alter system set AUDIT_SYS_OPERATIONS=true

    scope=spfile;

    SYS@orcl> startup force

    [oracle@ocp Desktop]$ cd /u01/app/oracle/admin/orcl/adump/

    Vi 查看审计内容

     

     

    权限审计示例:

    SYS@orcl> audit create table by scott by access;

    SYS@orcl> audit session by scott;

    SYS@orcl> select user_name,privilege,success,failure from

    dba_priv_audit_opts where user_name='SCOTT' order by

    user_name;

    SYS@orcl> conn scott/scott

    SCOTT@orcl> create table tt(id int);

    SCOTT@orcl> conn / as sysdba

    SYS@orcl>select username,to_char(timestamp,'MM/DD/YY

    HH24:MI') Timestamp,obj_name, action_name, sql_text from

    dba_audit_trail where username= 'SCOTT';

    SYS@orcl> noaudit create table by scott;

     

    六、对象审计

    AUDIT schema_object_clause BY {SESSION | ACCESS}WHENEVER [NOT] SUCCESSFUL;

    schema_object_clause 指定对象访问的类型以及访问的对象。

     

    可以审计特定对象上14 种不同的操作类型。对象审计选项如下:

     象 选 项

    说 明

    ALTER

    改变表、序列或物化视图

    AUDIT

    审计任何对象上的命令

    COMMENT

    添加注释到表、视图或物化视图

    DELETE

    从表、视图或物化视图中删除行

    EXECUTE

    执行过程、函数或程序包

    FLASHBACK

    执行表或视图上的闪回操作

    GRANT

     授予任何类型对象上的权限

    INDEX

     创建表或物化视图上的索引

    INSERT

    将行插入表、视图或物化视图中

    LOCK

    锁定表、视图或物化视图

    READ

    对DIRECTORY 对象的内容执行读操作

    RENAME

    重命名表、视图或过程

    SELECT

    从表、视图、序列或物化视图中选择行

    UPDATE

    更新表、视图或物化视图

     

     

    对象审计示例:

    SYS@orcl>show parameter audit_trail

    SYS@orcl> alter system set audit_trail=db_extended

    scope=spfile;

    SYS@orcl>show parameter audit_trail

    SYS@orcl> startup force

    SYS@orcl> alter user scott account unlock identified by

    scott;

    SYS@orcl> audit select,insert,delete on scott.dept by

    access;

    SYS@orcl> select

    object_name,object_type,alt,del,ins,upd,sel from

    dba_obj_audit_opts;

    SYS@orcl> conn scott/scott

    SCOTT @orcl> insert into dept values(11,'aa','aa');

    SCOTT @orcl> insert into dept values(12,'bb','bb');

    SCOTT @orcl> commit;

    SCOTT@orcl> conn / as sysdba

    SYS@orcl> select timestamp,action_name,sql_text from

    dba_audit_trail where owner='SCOTT';

    SYS@orcl> noaudit select,insert,delete on scott.dept;

     

    审计查询

    SYS@orcl>show parameter audit_trail

    SYS@orcl> alter system set audit_trail=db_extended

    scope=spfile;

    SYS@orcl> startup force

    SYS@orcl>show parameter audit_trail

    SYS@orcl> alter user scott account unlock identified by

    scott;

    SYS@orcl> audit select,insert,delete on scott.dept by

    access;

    SYS@orcl>delete sys.aud$;

    SYS@orcl> conn scott/scott

    SCOTT @orcl> insert into dept values(13,'cc','cc');

    SCOTT @orcl>select * from dept;

    SCOTT @orcl>delete from dept where deptno=11;

    SCOTT @orcl>update dept set loc='abc' where deptno=12;

    SCOTT@orcl> conn / as sysdba

    SYS@orcl>select

    username,timestamp,owner,action_name,obj_name from

    dba_audit_object;

     

    七、细粒度的审计

    细粒度的对象审计,或称为FGA,审计变得更为关注某个方面,并且更为精确。由称为DBMS_FGA 的PL/SQL 程序包实现FGA。

     

    使用标准的审计,可以轻松发现访问了哪些对象以及由谁访问,但无法知道访问了哪些行或列。细粒度的审计可解决这个问题,它不仅为需要访问的行指定谓词(或where 子句),还指定了表中访问的列。通过只在访问某些行和列时审计对表的访问,可以极大地减少审计表条目的数量。

     

    程序包DBMS_FGA 具有4 个过程:

    ADD_POLICY 添加使用谓词和审计列的审计策略

    DROP_POLICY 删除审计策略

    DISABLE_POLICY 禁用审计策略,但保留与表或视图关联的策略

    ENABLE_POLICY 启用策略

     

    用户wl 通常每天访问HR.EMPLOYEES 表,查找雇员的电子邮件地址。系统管理员怀疑wl 正在查看经理们的薪水信息,因此他们建立一个FGA 策略,用于审计任何经理对SALARY 列的任何访问。

     

    可以使用数据字典视图DBA_FGA_AUDIT_TRAIL 访问细粒度审计的审计记录。如果一般需要查看标准的审计行和细粒度的审计行,则数据字典视图DBA_COMMON_AUDIT_TRAIL 结合了这两种审计类型中的行。

     

    示例如下:

    [oracle@ocp Desktop]$ rlwrap sqlplus / as sysdba

    SYS@orcl>show parameter audit_trail

    SYS@orcl> alter system set audit_trail=db_extended

    scope=spfile;

    SYS@orcl> startup force

    SYS@orcl>show parameter audit_trail

    SYS@orcl> create user wl identified by wl;

    SYS@orcl> grant create session to wl;

    SYS@orcl> grant select on hr.employees to wl;

    SYS@orcl> alter user hr account unlock identified by hr;

    SYS@orcl> begin

    dbms_fga.add_policy(object_schema => 'HR',

    object_name => 'EMPLOYEES',

    policy_name => 'SAL_SELECT_AUDIT',

    audit_condition => 'instr(job_id,''_MAN'') > 0',

    audit_column => 'SALARY');

    end;

    /

    SYS@orcl> conn wl/wl

    WL@orcl> select employee_id, first_name, last_name, email

    from hr.employees where employee_id = 114;

    WL@orcl> conn / as sysdba

    SYS@orcl> select to_char(timestamp,'mm/dd/yy hh24:mi')

    timestamp,object_schema, object_name, policy_name,

    statement_type from dba_fga_audit_trail where db_user =

    'WL';

    SYS@orcl> conn wl/wl

    WL@orcl> select employee_id, first_name, last_name, salary

    from hr.employees where employee_id = 114;

    WL@orcl> conn / as sysdba

    SYS@orcl> select to_char(timestamp,'mm/dd/yy hh24:mi')

    timestamp,object_schema, object_name, policy_name,

    statement_type from dba_fga_audit_trail where db_user =

    'WL';

     

    第一个查询访问经理信息,但没有访问SALARY 列。第二个查询与第一个查询相同,但是访问了SALARY 列,因此触发了FGA 策略,从而在审计跟踪中生成了一行

     

     

    八、与审计相关的数据字典视图

    数据字典视图

    说 明

    AUDIT_ACTIONS

    包含审计跟踪动作类型代码的描述,例如

    INSERTDROP VIEWDELETELOGON LOCK

    DBA_AUDIT_OBJECT

     与数据库中对象相关的审计跟踪记录

    DBA_AUDIT_POLICIES

     数据库中的细粒度审计策略

    DBA_AUDIT_SESSION

    与CONNECT 和DISCONNECT 相关的所有审计跟踪记录

    DBA_AUDIT_STATEMENT

    与GRANT、REVOKE、AUDIT、NOAUDIT 和ALTER SYSTEM命令相关的审计跟踪条目

    DBA_AUDIT_TRAIL

     包含标准审计跟踪条目。USER_AUDIT_TRAIL 只包含已连接用户的审计行

    DBA_FGA_AUDIT_TRAIL

    细粒度审计策略的审计跟踪条目

    DBA_COMMON_AUDIT_TRAIL

     将标准的审计行和细粒度的审计行结合在一个视图中

    DBA_OBJ_AUDIT_OPTS

     对数据库对象生效的审计选项

    DBA_PRIV_AUDIT_OPTS

     对系统权限生效的审计选项

    DBA_STMT_AUDIT_OPTS

     对语句生效的审计选项

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31520497/viewspace-2156868/,如需转载,请注明出处,

  • 相关阅读:
    使用getattr() 分类: python基础学习 divide into python 2014-02-24 15:50 198人阅读 评论(0) 收藏
    使用locals()获得类,进行分发 分类: python 小练习 divide into python python基础学习 2014-02-21 14:51 217人阅读 评论(0) 收藏
    第1课第4.4节_Android硬件访问服务编写HAL代码
    第4.3节_Android硬件访问服务编写APP代码
    函数说明
    第1课第1节_编写第1个Android应用程序实现按钮和复选框
    vue生命周期
    程序代码中,怎么区分status和state?
    百度UEditor -- ZeroClipboard is not defined
    webstorm 设置ES6语法支持以及添加vuejs开发配置
  • 原文地址:https://www.cnblogs.com/lcword/p/11779635.html
Copyright © 2011-2022 走看看