【读书笔记】数据库审计
admin
2023-06-07 15:01:14
0次

数据库版本: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 

一、审计类型

ORACLE的审计技术,除了SYSDBA审计之外,还有数据库审计、基于值的审计、细粒度审计。

SQL> show parameter audit;

NAME                        TYPE        VALUE

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

audit_file_dest              string       /u01/app/oracle/admin/orcl/adump

audit_sys_operations           boolean      FALSE

audit_syslog_level            string      

audit_trail                 string       DB

1.1 SYSDBA审计

audit_sys_operations(默认为false)设置为TRUE,那么作为SYSDBA或SYSOPER连接数据库的用户所发布的每条语句都会被写入操作系统审核跟踪,从而能够给出DBA所进行操作的完整记录。

alter system set audit_sys_operations=TRUE scope=spfile;

之后重启数据库。

之后DBA的操作都会被记录在审计文件中。

1.2 数据库审计

设置数据库审计之前,必须设置audit_trail的值,这个参数可以具有以下值:

NONE(或者FALSE):禁用数据库审计

OS:审计记录会被写至操作系统的文件中;

DB:审计记录写到SYS.AUD$中。

DB_EXTENDED:与DB作用大体相同,不过包含生成审计记录的、具有绑定变量的SQL语句。

XML:与OS作用大体相同,但使用XML标记设置格式。

XML_EXTENDED:与XML作用大体相同,但使用SQL语句和绑定变量。

例如对scott上的emp表做审核

如果audit_trail的值是“DB",那么就看不到执行的语句,因此修改成:

alter system set audit_trail=DB_EXTENDED scope=spfile;

重启数据库。

audit select,delete,update on scott.emp by access;

--关闭审计:noaudit

select * from emp;

update emp

set comm=1500

where empno=7900;

insert into emp

select 7935,ename,job,mgr,hiredate,sal,comm,deptno

from emp

where empno=7934;

delete from emp 

where empno=7935;

--查看审计信息

select OS_USERNAME,username,USERHOST,TERMINAL,TIMESTAMP,OWNER,obj_name,ACTION_NAME,

sessionid,os_process,sql_text

  from dba_audit_trail

  where obj_name='EMP'

  order by timestamp desc;

如果audit_trail的值是DB,则看不到sql_text的信息,因此将audit_trail修改成db_extended,重新运行一次。

1.3 基于触发器执行基于值的审计

使用触发器配合审计,将变更的值记录到某个表中。即使不配置审计策略,也可以执行。

例如,我们对scott.emp表上comm列的变更值比较感兴趣,就可以建立一个触发器,将操作的值写入到表中。

create table AUDIT_VALUE_TRAIL

(

  terminal     VARCHAR2(256),

  sessionid    VARCHAR2(256),

  isdba        VARCHAR2(256),

  current_user VARCHAR2(256),

  os_user      VARCHAR2(256),

  ip_address   VARCHAR2(256),

  obj_user     VARCHAR2(10),

  obj_name     VARCHAR2(22),

  act_value    VARCHAR2(255)

);

create or replace trigger tri_emp_audit

after update of comm on scott.emp

referencing new as new old as old

for each row

begin

if :old.comm !=:new.comm then

insert into sys.audit_value_trail

values(SYS_CONTEXT('USERENV','TERMINAL'),

SYS_CONTEXT('USERENV','sessionid'),

SYS_CONTEXT('USERENV','ISDBA'),

SYS_CONTEXT('USERENV','CURRENT_USER'),

SYS_CONTEXT('USERENV','OS_USER'),

SYS_CONTEXT('USERENV','IP_ADDRESS'),

'scott','emp',:new.empno||' comm is  changed from '||:old.comm ||'to '||:new.comm );

end if;

end;

/

执行:

update emp

set comm=2000

where empno=7900;

commit;

对比dba_audit_trail、audit_value_trail的结果是否一样。


1.4 细粒度审计(FGA)

细粒度审计可以配置为只在访问特定行或特定行的特定列时生成审计记录,此外还可以配置为在违反审计条件时运行一个PL/SQL代码块。

配置FGA将会涉及包DBMS_FGA,为了创建一个FGA审计策略,需要使用add_policy过程,这个过程接受下表所示的参数:


参考资料:《OCP/OCA 认证考试指南全册》 第六章:ORACLE安全性 第6节使用标准数据库审核

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...