zy-303

Oracle数据库安全审计管理

 

一、审计功能介绍

审计(audit)用于监视用户所执行的数据库操作,审计记录可存在数据字典表(称为审计记录: 
01.存储在system表空间中的 sys.aud$表中,可通过视图dba_audit_trail查看)或操作系统审计记录中( 02.默认位置为$oracle_base/admin/$oracle_sid/adump/)。

默认情况下审计是没有开启的。10g
默认情况下审计是开启的。11gR2+

例如:数据被非授权用户所删除,此时安全管理员可决定对该数据库的所有连接进行审计,以及对数据库的所有表的成功地或不成功地删除进行审计。

审计语句的成功执行、不成功执行,或者其两者。

对每一用户会话审计语句执行一次或者对语句每次执行审计一次。

对全部用户或指定用户的活动的审计。

但有些功能不管开不开审计,都是会被记录的:

用管理员权限连接instance;启动数据库;关闭数据库。

 

 

二、审计相关的参数与视图

1. audit_sys_operations

1) audit_sys_operations
默认为false,当设置为true时,所有sys用户(包括以sysdba, sysoper身份登录的用户)的操作都会被记录.
audit trail不会写在aud$表中,这个很好理解,如果数据库还未启动aud$不可用,那么像conn /as sysdba这样的连接信息,只能记录在其它地方。
如果是windows平台,audti trail会记录在windows的事件管理中,
如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。

show parameter audit_sys_operations
 
show parameter audit_file_dest
SQL> show parameter audit
​
NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest              string  /data/app/oracle/admin/orcl/ad
                         ump
audit_sys_operations             boolean     FALSE
audit_syslog_level           string
audit_trail              string  DB
SQL>// 默认是 DB 意思是:将审计日志记录到数据库的审计相关表中 
​
SQL> desc aud$   //默认的是记录到这个上面,默认的审计结果只有连接信息
 Name                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SESSIONID                 NOT NULL NUMBER
 ENTRYID                   NOT NULL NUMBER
 STATEMENT                 NOT NULL NUMBER
 TIMESTAMP#                     DATE
 USERID                         VARCHAR2(30)
 USERHOST                       VARCHAR2(128)
 TERMINAL                       VARCHAR2(255)
 ACTION#                   NOT NULL NUMBER
 RETURNCODE                NOT NULL NUMBER
 OBJ$CREATOR                        VARCHAR2(30)
 OBJ$NAME                       VARCHAR2(128)
 AUTH$PRIVILEGES                    VARCHAR2(16)
 AUTH$GRANTEE                       VARCHAR2(30)
 NEW$OWNER                      VARCHAR2(30)
 NEW$NAME                       VARCHAR2(128)
 SES$ACTIONS                        VARCHAR2(19)
 SES$TID                        NUMBER
 LOGOFF$LREAD                       NUMBER
 LOGOFF$PREAD                       NUMBER
 LOGOFF$LWRITE                      NUMBER
 LOGOFF$DEAD                        NUMBER
 LOGOFF$TIME                        DATE
 COMMENT$TEXT                       VARCHAR2(4000)
 CLIENTID                       VARCHAR2(64)
 SPARE1                         VARCHAR2(255)
 SPARE2                         NUMBER
 OBJ$LABEL                      RAW(255)
 SES$LABEL                      RAW(255)
 PRIV$USED                      NUMBER
 SESSIONCPU                     NUMBER
 NTIMESTAMP#                        TIMESTAMP(6)
 PROXY$SID                      NUMBER
 USER$GUID                      VARCHAR2(32)
 INSTANCE#                      NUMBER
 PROCESS#                       VARCHAR2(16)
 XID                            RAW(8)
 AUDITID                        VARCHAR2(64)
 SCN                            NUMBER
 DBID                           NUMBER
 SQLBIND                        CLOB
 SQLTEXT                        CLOB
 OBJ$EDITION                        VARCHAR2(30)
​
SQL> 

 

 

 

2. audit_trail

none:是默认值,不做审计;
db:将audit trail 记录在数据库的审计相关表中,如aud$,审计的结果只有连接信
息;
db,extended:这样审计结果里面除了连接信息还包含了当时执行的具体语句;
os:将audit trail 记录在操作系统文件中,文件名由audit_file_dest参数指定;
xml:10g里新增的。

show parameter audit_trail
NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
audit_trail              string  DB
SQL> 
​
注:这两个参数是static参数,需要重新启动数据库才能生效。

3. 审计相关的视图

dba_audit_trail:
保存所有的audit trail,实际上它只是一个基于aud$的视图。其它的视图dba_audit_session,dba_audit_object,dba_audit_statement 都只是dba_audit_trail的一个子集。

dba_stmt_audit_opts:
可以用来查看statement审计级别的audit options,即数据库设置过哪些statement级别的审计。dba_obj_audit_opts,dba_priv_audit_opts视图功能与之类似

all_def_audit_opts:
用来查看数据库用on default子句设置了哪些默认对象审计。

 

三、审计级别与权限

 

1.审计级别

当开启审计功能后,可在三个级别对数据库进行审计:statement(语句)、privilege
(权限)、object(对象)。

 

1.1 statement(语句)

statement
语句审计,对某种类型的sql语句审计,不指定结构或对象。比如audit table 会审计
数据库中所有的create table,drop table,truncate table语句,alter session by cmy
会审计cmy用户所有的数据库连接。

1.2 privilege(权限)

privilege
权限审计,当用户使用了该权限则被审计,如执行grant selectany table to a,当执
行了audit select any table语句后,当用户a 访问了用户b的表时(如select * from
b.t)会用到select any table权限,故会被审计。注意用户是自己表的所有者,所以用
户访问自己的表不会被审计。

1.3 object(对象)

object
对象审计,对一特殊模式对象上的指定语句的审计. 如审计on关键字指定对象的相关
操作,如aduit alter,delete,drop,insert on cmy.t by itpux; 这里会对cmy用户的t表
进行审计,但同时使用了by子句,所以只会对scott用户发起的操作进行审计。

注意:

oracle没有提供对schema中所有对象的审计功能,只能一个一个对象审计,对于后面

创建的对象,oracle则提供on default子句来实现自动审计,比如执行audit drop on

defaultby access;后,对于随后创建的对象的drop操作都会审计。但这个default会

对之后创建的所有数据库对象有效,似乎没办法指定只对某个用户创建的对象有效,

想比 trigger可以对schema的ddl进行“审计”,这个功能稍显不足。

 

2.审计选项:by access(访问) / by session(会话)

by access 每一个被审计的操作都会生成一条audit trail。
by session 一个会话里面同类型的操作只会生成一条audit trail,默认为by session。

3. whenever [not] successful

whenever successful 操作成功(dba_audit_trail中returncode字段为0) 才审计, 
whenever not successful 反之。省略该子句的话,不管操作成功与否都会审计

4.审计的细粒度

fine-grainedauditing(fga) 细粒度审计

细粒度审计(fga):精细审计 ,是在 oracle 9i 中引入的,能够记录 scn 号和行级的更
改以重建旧的数据,但是它们只能用于 select 语句,而不能用于 dml ,如 update 、
insert 和delete 语句。
因此,对于 oracle 数据库 10g 之前的版本,使用触发器虽然对于以行级跟踪用户
初始的更改是没有吸引力的选择,但它也是唯一可靠的方法。
10g 之后版本可以audit 所有dml。fga的实现基于dbms_fga包。它属于sys用户。

fga 策略的定义位于数据字典视图 dba_audit_policies 中。
审计线索收集在 sys 拥有的表 fga_log$ 中
对于 sys 拥有的任何原始表,此表上的某些视图以对用户友好的方式显示信息。
dba_fga_audit_trail是该表上的一个视图。

 

四、审计功能的安装

 

 

 

分类:

oracle

技术点:

相关文章: