Oracle12.2c统一审计是什么

75次阅读
没有评论

共计 8334 个字符,预计需要花费 21 分钟才能阅读完成。

这篇文章主要介绍“Oracle12.2c 统一审计是什么”,在日常操作中,相信很多人在 Oracle12.2c 统一审计是什么问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle12.2c 统一审计是什么”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

什么是统一审计?

审计是指监控和记录用户对数据库执行所有成功或失败的操作。

而统一审计(UNIFIED_AUDIT_TRAIL)是 Oracle 在 12c 版本推出的一种全新的审计体系。在新的体系下,Oracle 提供了更精细化的管理,并且将所有的审计记录按照统一的格式写入到 AUDSYS schema 下,可以通过 UNIFIED_AUDIT_TRAIL 视图查看。默认地,审计记录会被存放在 SYSAUX 表空间下。当然,Oracle 也建议将审计数据从 SYSAUX 中剥离出来放到新的表空间下,这一功能可以通过 DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION 包实现。

统一审计的相关权限?

除了 SYS 用户外,只有被赋予 AUDIT_ADMIN 或 AUDIT_VIEWER 的用户才能看到 UNIFIED_AUDIT_TRAIL 数据字典视图。如果用户只需要查询 UNIFIED_AUDIT_TRAIL,但是不需要创建审计策略(audit policy),那么只需要赋予 AUDIT_VIEWER role 就可以了。

如何检查统一审计是否开启?

SQL SELECT VALUE FROM V$OPTION WHERE   PARAMETER = Unified Auditing

 

VALUE

—————————————————————-

FALSE

TRUE: 代表完全统一审计开启;

FALSE:代表传统审计和统一审计的混合模式。

什么是完全统一审计模式 (Pure unified auditing) 和混合审计模式(Mixed Mode Auditing)?

完全统一审计模式,顾名思义,就是摒弃了之前的传统审计模式。

禁用统一审计方法, 以单机为例:

shutdown

cd $ORACLE_HOME/rdbms/lib

make -f ins_rdbms.mk uniaud_off ioracle

startup

混合审计模式,只要开启了统一审计策略,就会形成统一审计和传统审计并存的局面,此时就是混合审计模式。默认建库时会启用 ORA_SECURECONFIG,一个统一审计策略,这也就意味着默认建库时,就是混合审计模式。

ORA_SECURECONFIG 详情如下:

CREATE AUDIT POLICY ORA_SECURECONFIG

 PRIVILEGES ALTER ANY TABLE, CREATE ANY   TABLE, DROP ANY TABLE,

  CREATE ANY PROCEDURE, DROP ANY   PROCEDURE, ALTER ANY PROCEDURE,

  GRANT ANY PRIVILEGE, GRANT ANY   OBJECT PRIVILEGE, GRANT ANY ROLE,

  AUDIT SYSTEM, CREATE EXTERNAL   JOB, CREATE ANY JOB,

  CREATE ANY LIBRARY,

  EXEMPT ACCESS POLICY,

  CREATE USER, DROP USER,

  ALTER DATABASE, ALTER SYSTEM,

  CREATE PUBLIC SYNONYM, DROP   PUBLIC SYNONYM,

  CREATE SQL TRANSLATION PROFILE,   CREATE ANY SQL TRANSLATION PROFILE,

  DROP ANY SQL TRANSLATION PROFILE,   ALTER ANY SQL TRANSLATION PROFILE,

  TRANSLATE ANY SQL,

  EXEMPT REDACTION POLICY, 

  PURGE DBA_RECYCLEBIN, LOGMINING,

   ADMINISTER KEY MANAGEMENT

 ACTIONS    ALTER USER, CREATE ROLE, ALTER ROLE, DROP ROLE,

  SET ROLE, CREATE PROFILE, ALTER   PROFILE,

  DROP PROFILE, CREATE DATABASE   LINK,

  ALTER DATABASE LINK, DROP   DATABASE LINK,

   CREATE DIRECTORY, DROP DIRECTORY,

  CREATE PLUGGABLE DATABASE, 

  DROP PLUGGABLE DATABASE,

  ALTER PLUGGABLE DATABASE,

  EXECUTE ON DBMS_RLS;

审计数据落盘策略是什么?

审计数据写入数据文件有两种方式:

1. immediate-write mode 立即写

2. queued-write mode 队列写

立即写是将产生的审计数据马上写入硬盘,这样可以保证不丢失审计数据,但是对系统系统会有些许影响。

队列写是先将审计数据写入 SGA,而不是直接写入数据文件,根据一定的策略再将审计数据写入数据文件。一般有两种策略:


时间策略:每隔三秒钟,视系统繁忙程度,也可能三秒钟了也没有写入。由隐含参数_unified_audit_flush_interval 控制。


空间策略:存放在 SGA 中的审计数据容量达到 85%。该区域默认是 1M,由参数 unified_audit_sga_queue_size 控制,比例由隐含参数_unified_audit_flush_threshold 控制

SQL col name for a30;

SQL col value for a10;

SQL select * from

    2  (select

    3  x.ksppinm name,

    4  y.ksppstvl value,

    5  y.ksppstdf isdefault,

    6    decode(bitand(y.ksppstvf,7),1, MODIFIED ,4, SYSTEM_MOD , FALSE )   ismod,

    7    decode(bitand(y.ksppstvf,2),2, TRUE , FALSE ) isadj

    8  from

    9  sys.x$ksppi x,

 10    sys.x$ksppcv y

 11    where

 12    x.inst_id = userenv(Instance) and

 13    y.inst_id = userenv(Instance) and

 14    x.indx = y.indx

 15    order by

 16    translate(x.ksppinm, _ ,)) T where T.name like   %unified_audit%

 

NAME  VALUE  ISDEFAULT ISMOD  ISADJ

—————————— ———-   ——— ———- —–

_unified_audit_flush_interval  3    TRUE  FALSE  FALSE

_unified_audit_flush_threshold 85  TRUE  FALSE  FALSE

_unified_audit_policy_disabled FALSE  TRUE  FALSE  FALSE

unified_audit_sga_queue_size  1048576    TRUE  FALSE  FALSE

当前落盘方式

SQL SELECT PARAMETER_VALUE

    2  FROM   DBA_AUDIT_MGMT_CONFIG_PARAMS

    3  WHERE PARAMETER_NAME = AUDIT   WRITE MODE

 

PARAMETER_VALUE

—————————————————————–

QUEUED WRITE MODE

修改为 immediate-write mode

BEGIN

 DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(

    DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

    DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE,

    DBMS_AUDIT_MGMT.AUDIT_TRAIL_IMMEDIATE_WRITE);

END;

/

修改为

BEGIN

 DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(

    DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

    DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE,

    DBMS_AUDIT_MGMT.AUDIT_TRAIL_QUEUED_WRITE);

END;

/

队列写模式下如何手动 flush 审计数据?

手动刷新当前实例,适用于单机和 rac 单实例

EXEC   DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL;

 

EXEC DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL(DBMS_AUDIT_MGMT.FLUSH_CURRENT_INSTANCE);

 

Flush RAC 所有实例

EXEC   DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL(DBMS_AUDIT_MGMT.FLUSH_ALL_INSTANCES);

对于多租户环境

当前 PDB

BEGIN   

 DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL(

    CONTAINER  =   DBMS_AUDIT_MGMT.CONTAINER_CURRENT);

END;

/

所有的 PDB 环境

BEGIN   

 DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL(

    CONTAINER  =   DBMS_AUDIT_MGMT.CONTAINER_ALL);

END;

/

如何将操作系统上的审计数据写入数据库统一审计文件中?

当数据库 mount 状态,或者 read only,或者关闭时,Oracle 会将审计数据存放在操作系统的 $ORACLE_BASE/audit/$ORACLE_SID 目录下。

查看当前操作系统下

oracle@bd-dev-mingshuo-183:/opt/app/oracle/audit/mingdb/70A2182C94E1412DE053B7D91FAC647A$ll

total 32

-rw——- 1 oracle oinstall 30720 Jul 10   16:57 ora_audit_0786.bin

登入数据库执行

EXEC DBMS_AUDIT_MGMT.LOAD_UNIFIED_AUDIT_FILES;

命令完成之后,操作系统那个文件就消失了。

每个 PDB 会有一个同名的 uuid 目录,如果要将 pdb 的数据导入数据库,那么需要在 pdb 中执行上述命令。

删除审计的两种方法?1. 自动清理任务

设置清理时间点

BEGIN

    DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(

    AUDIT_TRAIL_TYPE  =   DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

    LAST_ARCHIVE_TIME  =   12-OCT-2013 06:30:00.00 ,

    RAC_INSTANCE_NUMBER  =   1,

    CONTAINER  =   DBMS_AUDIT_MGMT.CONTAINER_CURRENT);

END;

/

AUDIT_TRAIL_TYPE:指定审计数据类型


DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED:统一审计数据


DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD:AUD$ 表


DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD:FGA_LOG$ 表


DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS:操作系统上.aud 结尾的文件


DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML:XML 文件

LAST_ARCHIVE_TIME:指定时间,设置后该时间可以从 DBA_AUDIT_MGMT_LAST_ARCH_TS 中查出,设置时间点的意义在于,会清理这个时间点之前的归档过的数据。

RAC_INSTANCE_NUMBER:RAC 数据库相关参数。单实例不需要设置。默认值是 null。因为 RAC 数据库也只有一个 AUD$ 表和 FGA_LOG$ 表

,那么即使是 RAC 数据库,对应的审计类型 DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD 和 DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,那么也不用设置这个值。

CONTAINER:适用于多租户环境


DBMS_AUDIT_MGMT.CONTAINER_CURRENT:指定当前 PDB


DBMS_AUDIT_MGMT.CONTAINER_ALL:所有 PDB

当上述设置完成后,就可以用 DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL 包清理设置的时间点之前的审计数据。

BEGIN

DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(

    audit_trail_type = DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

    use_last_arch_timestamp = TRUE);

END;

/

创建清理 job

BEGIN

    DBMS_AUDIT_MGMT.CREATE_PURGE_JOB (

    AUDIT_TRAIL_TYPE    = DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

    AUDIT_TRAIL_PURGE_INTERVAL    = 12,

    AUDIT_TRAIL_PURGE_NAME    = Audit_Trail_PJ ,

    USE_LAST_ARCH_TIMESTAMP    = TRUE,

    CONTAINER    = DBMS_AUDIT_MGMT.CONTAINER_CURRENT);

END;

/

AUDIT_TRAIL_TYPE: 指定审计数据类型


DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED:统一审计数据


DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD:针对 AUD$ 表


DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD:针对 FGA_LOG$ 表


DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD:针对 AUD$ 表和 FGA_LOG$ 表


DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS:操作系统上.aud 结尾的文件


DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML:XML 文件


DBMS_AUDIT_MGMT.AUDIT_TRAIL_FILES:操作系统上.aud 结尾的文件和 XML 文件


DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL:上述所有类型的审计数据

AUDIT_TRAIL_PURGE_INTERVAL:job 每隔多久就运行一次,单位是小时。如果后面想要更改这个值,那么可以用 DBMS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL 包。

USE_LAST_ARCH_TIMESTAMP:清理数据的时间选项


TRUE: 清理截止到上次归档的时间点


FLASE: 删除所有的数据

CONTAINER:多租户环境适用


DBMS_AUDIT_MGMT.CONTAINER_CURRENT:PDB 级别


DBMS_AUDIT_MGMT.CONTAINER_ALL:CDB 和 PDB 级别

设置好 job 后,启动

BEGIN

 DBMS_AUDIT_MGMT.SET_PURGE_JOB_STATUS(

    AUDIT_TRAIL_PURGE_NAME    = Audit_Trail_PJ ,

    AUDIT_TRAIL_STATUS_VALUE    = DBMS_AUDIT_MGMT.PURGE_JOB_ENABLE);

END;

/

AUDIT_TRAIL_PURGE_NAME:purge job 策略的名字,就是上面 CREATE_PURGE_JOB 里指定的。

AUDIT_TRAIL_STATUS_VALUE:


DBMS_AUDIT_MGMT.PURGE_JOB_ENABLE:开启


DBMS_AUDIT_MGMT.PURGE_JOB_DISABLE:停止

修改 job 运行间隔

BEGIN

 DBMS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL(

    AUDIT_TRAIL_PURGE_NAME    = Audit_Trail_PJ ,

    AUDIT_TRAIL_INTERVAL_VALUE    = 24);

END;

/

删除清理 job

BEGIN

 DBMS_AUDIT_MGMT.DROP_PURGE_JOB(

    AUDIT_TRAIL_PURGE_NAME  =   Audit_Trail_PJ

END;

/

2. 手动清理审计

BEGIN

    DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(

    AUDIT_TRAIL_TYPE    =     DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

    USE_LAST_ARCH_TIMESTAMP  =   TRUE,

    CONTAINER    =     DBMS_AUDIT_MGMT.CONTAINER_CURRENT );

END;

/

 

各参数含义同上。

统一审计生产实战配置?

为了防止审计数据过多,需要定期对审计数据进行清理。

移动审计表空间

BEGIN

    DBMS_AUDIT_MGMT.set_audit_trail_location(

    audit_trail_type  =   DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,

    audit_trail_location_value = TBS_MING

END;

/

设置 purge job

BEGIN

    DBMS_AUDIT_MGMT.CREATE_PURGE_JOB (

    AUDIT_TRAIL_TYPE    = DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

    AUDIT_TRAIL_PURGE_INTERVAL    = 24,

    AUDIT_TRAIL_PURGE_NAME    = Unified_Audit_Trail_PURGEJOB ,

    USE_LAST_ARCH_TIMESTAMP    = TRUE);

END;

/

上面的 job 在运行时,要根据 SET_LAST_ARCHIVE_TIMESTAMP 的时间,下面的 job 可以手动刷新这个时间,不然上面的 job 最多只运行一次。

BEGIN

    DBMS_SCHEDULER.create_job (

    job_name  = audit_last_archive_time ,

    job_type  =   PLSQL_BLOCK ,

    job_action  = BEGIN

      DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,   TRUNC(SYSTIMESTAMP)-60);

  END; ,

    start_date  =   SYSTIMESTAMP,

    repeat_interval = freq=daily; byhour=0; byminute=0; bysecond=0; ,

    end_date  = NULL,

    enabled  = TRUE,

    comments  =   Automatically set audit last archive time.

END;

/

到此,关于“Oracle12.2c 统一审计是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计8334字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)