iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle 11g与12c的审计详解
  • 242
分享到

Oracle 11g与12c的审计详解

Oracle11g与12c的审计详解 2019-05-29 11:05:11 242人浏览 绘本
摘要

最近遇到一些脚本诱发的审计相关BUG,感觉有必要重新梳理一下11g与12c的审计模式,于是根据官网修正了一下以前的一篇笔记这里发出来。 一、审计功能的开启: SQL> show parameter audit --主要有以下四个参数: A

最近遇到一些脚本诱发的审计相关BUG,感觉有必要重新梳理一下11g与12c的审计模式,于是根据官网修正了一下以前的一篇笔记这里发出来。

一、审计功能的开启:

SQL> show parameter audit
--主要有以下四个参数:
AUDIT_TRaiL(default:DB)
AUDIT_FILE_DEST(default:oracle_BASE/admin/ORACLE_SID/adump or ORACLE_HOME/rdbms/audit)
AUDIT_SYS_OPERATioNS(default:FALSE)
AUDIT_SYSLOG_LEVEL(no default)

audit_trail参数的值可以设置为以下几种(11G,12C适用):

https://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams017.htm#REFRN10006

1. none --不开启
2. os --启用数据库审计,并将数据库审计记录定向到操作系统文件,存储目录为AUDIT_FILE_DEST
3. db --开启审计功能 启用数据库审计,并将数据库所有审计记录定向到数据库的SYS.AUD$表
5. db, extended --extened之前的空格必须有,启用数据库审计,并将数据库所有审计记录定向到数据库的SYS.AUD$表,另外填充SYS.AUD$表的sqlBIND列和SQLTEXT列
6. xml  --类似os,但是是将审计记录存放于XML格式的文件中
7. xml, extended --将审计记录存放于操作系统的xml文件中并填充sql_text和sql_bind信息
#此参数无法动态修改,因此需要重启数据库才能生效,示例:
alter system set AUDIT_TRAIL=db scope=spfile;
#对于db和db, extended两种审计模式,如果数据库是read-only模式的,那么数据库默认使用os审计模式,无视已有设置(因为不能向数据库表写入数据)。

AUDIT_SYS_OPERATIONS设置为true那么sys用户的操作也会被审计,但此值默认为false,此参数控制以sysdba和sysoper权限登陆的用户以及sys用户本身的登陆,审计记录一定会写在操作系统文件中(无论AUDIT_TRAIL参数如何设置)。

AUDIT_SYSLOG_LEVEL则表示当涉及到向操作系统文件写入审计记录时,直接写入到系统日志中而不是AUDIT_FILE_DEST(仅适用于类unix系统)。

二、审计记录的存储
审计的两大分类:
  • 标准审计:主要记录一些涉及数据库安全性的SQL操作和权限变更等,官网列出的默认标准审计项包含如下操作(通过DBA_STMT_AUDIT_OPTS查看):
    --Oracle Database audits the following privileges by default:
    ALTER ANY PROCEDURE 	CREATE ANY LIBRARY 				DROP ANY TABLE
    ALTER ANY TABLE 		CREATE ANY PROCEDURE 			DROP PROFILE
    ALTER DATABASE 			CREATE ANY TABLE 				DROP USER
    ALTER PROFILE 			CREATE EXTERNAL JOB 			EXEMPT ACCESS POLICY
    ALTER SYSTEM 			CREATE PUBLIC DATABASE LINK 	GRANT ANY OBJECT PRIVILEGE
    ALTER USER 				CREATE SESSION 					GRANT ANY PRIVILEGE
    AUDIT SYSTEM 			CREATE USER 					GRANT ANY ROLE
    CREATE ANY JOB 			DROP ANY PROCEDURE 	 
    --Oracle Database audits the following SQL statement shortcuts by default:
    ROLE 					SYSTEM AUDIT 					PUBLIC SYNONYM
    DATABASE LINK 			PROFILE 						SYSTEM GRANT
    --此外通过audit命令指定的审计也是标准审计。
    
  • 精细审计:提供非常细粒度的审计,例如可以使你审计针对某个表的某些字段在某一段时间内的某种DML操作,还可以限定客户端的IP等。

标准审计记录存储在SYS.AUD$表中,精细审计的记录存放于SYS.FGA_LOG$表中,分别可以通过DBA_AUDIT_TRAIL和DBA_FGA_AUDIT_TRAIL查看标准和精细审计的审计记录。

两种审计模式还有一个共同的视图可以看:DBA_COMMON_AUDIT_TRAIL,包含了标准+精细审计的记录。

truncate table aud$; --可以截断相关表,清理审计数据。

查看dba_common_audit_trail(包含标准和精细审计的记录)可以看到记录的主要字段包含:

SESSION_ID:并非是真正的会话id,应该只是一个审计的会话ID标识,反正与当前会话的ID对不上。
记录生成时间
DB_USER、OS_USER、USERHOST
OS_PROCESS:服务端对应的server process的系统进程ID,如果带冒号:,冒号后边的是线程ID
RETURNCODE:服务端的返回错误码,比如密码验证失败就会显示1017的错误码,即ORA-1017:"invalid username/passWord; loGon denied"
COMMENT_TEXT:如果是远程登录还会包含客户端连接使用的TNS信息,包括使用的端口号
LOGOFF_TIME:会话登出时间
LOGOFF_LREAD、LOGOFF_PREAD、LOGOFF_LWRITE、LOGOFF_DLOCK:会话期间的逻辑读、物理读、物理写、死次数
ACTION:审计记录对应的操作号
STATEMENT_TYPE:审计记录对应的操作号表示的具体操作,也可以用过查询audit_actions视图来获取action与STATEMENT_TYPE的对应关系

提示:

12c中的unified审计记录不在AUD$表中,而是存储在AUDSYS schema下,可以通过AUDSYS.UNIFIED_AUDIT_TRAIL表查询,开启unified审计后传统的AUD$和dba_common_audit_trail等不再包含任何审计记录。

三、关于精细审计(fine-grained auditing):

Https://docs.oracle.com/cd/E11882_01/network.112/e36292/auditing.htm#DBSEG525

如果想要细粒度的审计某个schema下针对某个表的某些数据的操作记录,可以开启精细审计,这允许你设计很细粒度的策略,例如创造一个fga策略如下:

--查看相关包的用法:
desc DBMS_FGA;
BEGIN
 DBMS_FGA.ADD_POLICY(
 OBJECT_SCHEMA=>"HR",                   
 OBJECT_NAME =>"EMPLOYEES",                    
 POLICY_NAME =>"SAL_AUD",                    
 AUDIT_CONDITION =>"SALARY>3000",               
 AUDIT_COLUMN =>"SALARY",                                    
 ENABLE=>TRUE,                          
 STATEMENT_TYPES=>"SELECT,UPDATE");
END;
--在sqlplus 中直接/执行,或者作为存储过程在plsql中exec dbms_fga.add_policy(...........);

 查看精细审计策略:

DESC dba_audit_policies;
--查看已创建的精细审计策略
SELECT OBJECT_NAME,POLICY_NAME,ENABLED FROM DBA_AUDIT_POLICIES;

删除精细策略:

begin
dbms_fga.drop_policy (
object_schema=>"HR",
object_name=>"TEST",
policy_name=>"SAL_AUD");
end;
/

四、查看审计记录:

DBA_COMMON_AUDIT_TRAIL:https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_3077.htm#REFRN23393

desc dba_common_audit_trail;
--示例:12c之前查看因为密码验证失败的审计记录:
select 
	EXTENDED_TIMESTAMP,DB_USER, OS_USER, USERHOST, COMMENT_TEXT
from dba_common_audit_trail
where 
	DB_USER = "EASYITS"
   and RETURNCODE = 1017
   and EXTENDED_TIMESTAMP between
       to_timestamp("2019-04-18 21:30:00", "YYYY-MM-DD HH24:MI:SS") and
       to_timestamp("2019-04-18 22:30:00", "YYYY-MM-DD HH24:MI:SS");

 五、12c审计:

官网参考:

12c的传统审计(即11g里的标准审计和精细审计):

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/AUDIT-Traditional-Auditing.html#GUID-ADF45B07-547A-4096-8144-50241FA2D8DD

12c的unified审计:

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/AUDIT-Unified-Auditing.html#GUID-B24D6874-4053-4E66-8238-6CD0C87E9DCA

12c中新引入的审计机制名为unified audit,你可以将其理解为一种更加轻便的精细审计。

我们知道在12c之前想要使用精细审计就要用dbms_fga包去创建审计策略,想要使用标准审计就要用audit语句去审计特定的权限和SQL,相关的视图也非常多,这导致审计策略的管理非常混乱,audit的语法也非常的反人类。而12c的unified audit则对设置审计策略的方式做了统一和简化,只需要使用以下三种语句来设置审计策略就可以了:

  • create audit policy (unified auditing)
  • alter audit policy (unified auditing)
  • drop audit policy (unified auditing)

而开启和关闭审计策略也极简,只需要使用简单的audit和noaudit语句:

audit policy ;
noaudit policy ;

可以看到我们只要熟悉创建/修改审计策略的语法就可以了。

至于原有的标准审计和精细审计的创建模式,12c中依然保留,在混合审计模式下你依然可以使用dbms包创建精细审计,audit命令也保留着创建标准审计的语法。

Unified审计模式的开启:

12c的Unified Auditing参数默认为false:

select parameter,value from v$option where parameter="Unified Auditing";

这种默认设置表示既支持12c之前的那种标准+精细的传统审计模式,也可以使用unified审计模式,这种默认的模式也被称作混合审计模式(mixed)。

而如果开启unified audting,那么传统审计模式就会被禁用,audit_trail参数被忽略,AUD$和FGA_LOG$等相关表不再新增任何审计记录,只能在AUDSYS.UNIFIED_AUDIT_TRAIL中看到unified审计的记录。

如何开启unified审计?

SQL> shutdown immediate;
ORACLE instance shut down.
SQL> host ( cd $ORACLE_HOME/rdbms/lib ; make -f ins_rdbms.mk uniaud_&2 ioracle ORACLE_HOME=$ORACLE_HOME )

12c混合审计模式下的审计表现:

我们知道11g中,只要audit_trail不为none,那么数据库会默认审计一些操作,例如logon,logout和涉及数据库安全的操作等。而在12c中系统也预设了一些unified审计策略,可以通过AUDIT_UNIFIED_ENABLED_POLICIES视图查看已生效的审计策略,通过AUDIT_UNIFIED_POLICIES可以查看所有预设审计策略。

12c的混合模式下,对于11g中那些标准审计默认审计的审计项们也依然进行审计,只不过方式变了,变为了通过默认开启一些unified审计策略来进行这些默认审计(DBA_STMT_AUDIT_OPTS也不再包含记录)。我们可以看一下这些默认开启的审记策略:

select * from AUDIT_UNIFIED_ENABLED_POLICIES;
 

以上为12c中默认开启的审计策略,其中ORA_LOGON_FAILURES在12.1.0.2以后被从ORA_SECURECONFIG独立出来,并且只审计失败的登录.

而从AUDIT_UNIFIED_POLICIES视图可以看出ORA_SECURECONFIG其实就包含了以前的那些默认标准审计项。

混合模式下无论是传统审计记录,还是通过预设的unified auditing policy进行的默认审计,其审计记录在dba_common_audit_trail中都可以查看。

您可能感兴趣的文档:

--结束END--

本文标题: Oracle 11g与12c的审计详解

本文链接: https://www.lsjlt.com/news/2395.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • sql中外码怎么设置
    sql 中外码设置步骤:确定父表和子表。在子表中创建外码列,引用父表主键。使用 foreign key 约束将外码列链接到父表主键。指定引用动作,以处理父表数据更改时的子表数据操作。 ...
    99+
    2024-05-15
  • sql中having是什么
    having 子句用于过滤分组结果,应用于分组后的数据集。它与 where 子句类似,但基于分组结果而不是原始数据。用法:1. 过滤分组后的聚合值。2. 根据分组后的...
    99+
    2024-05-15
  • 在sql中空值用什么表示
    在 sql 中,空值表示未知或不存在的值,可使用 null、空字符串或特殊值表示。处理空值的方法包括使用操作符(is null/is not null)、coalesce 函数(返回第一...
    99+
    2024-05-15
    oracle
  • sql中number什么意思
    sql 中的 number 类型用于存储数值数据,包括小数和整数,特别适合货币、度量和科学数据。其精度由 scale(小数点位数)和 precision(整数字段和小数字段总位数)决定。...
    99+
    2024-05-15
  • sql中空值赋值为0怎么写
    可以通过使用 coalesce() 函数将 sql 中的空值替换为指定值(如 0)。coalesce() 的语法为 coalesce(expression, replacement),其...
    99+
    2024-05-15
  • sql中revoke语句的功能
    revoke 语句用于撤销指定用户或角色的权限或角色成员资格。可撤销的权限包括 select、insert、update、delete 等,撤销的对象类型包括表、视图、存储过程...
    99+
    2024-05-15
    敏感数据
  • sql中REVOKE是什么意思
    revoke 是 sql 中用于撤销用户或角色对数据库对象权限的命令。它通过撤销权限类型、对象级别和目标权限来实现:权限类型:撤销 select、insert、update、d...
    99+
    2024-05-15
  • sql中sp是什么意思
    sql中的sp是存储过程的缩写,它是一种预编译的、已命名的sql语句块,存储在数据库中,可以被用户通过简单命令调用。存储过程的特点有:可重用性、模块化、性能优化、安全性、事务支持。存储过...
    99+
    2024-05-15
    敏感数据
  • sql中references是什么意思
    sql 中的 references 关键字用于在外键约束中定义表之间的父-子关系。外键约束确保子表中的行都引用父表中存在的行,从而维护数据完整性。references 语法的格式为:fo...
    99+
    2024-05-15
  • sql中判断字段为空怎么写
    sql 中可通过 4 种方法判断字段是否为空:1)is null 运算符;2)is not null 运算符;3)coalesce() 函数;4)case 语句。例如,查询所有 colu...
    99+
    2024-05-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作