技术开发 频道

Oracle 9i审计技术应用详解

如何实现审计

Oracle审计特性提供了三种级别的审计,分别是语句级、权限级和实体级。同时,我们还可以配合使用触发器来实现特定的细粒度的审计功能实现,以到达互补的效果,提供更全面和强有力的审计证据支持。

•语句级审计

语句级审计表示只审计某种类型的SQL语句,可以审计某个用户,也可以审计所有用户的SQL语句,其语法如下:

SQL>Audit SQL语句或选项 [by 用户名] --表示只审计指定用户的SQL语句,不审计其他用户的SQL语句 [by session/access] --by session:每个会话相同语句只审计一次,系统默认; by access:每次都将审计 Whenever [NOT] Successful;--只审计(不)成功的语句

SQL语句或选项参数不需要写出全部的SQL语句,只需要写出语句的选项即可,这样可以代表某一类的SQL语句。例如:

audit table by bjmiadmin by access

当用户执行Create Table;Drop Table;Truncate Table等与table相关的操作时,系统会自动记录这些过程,将其保存在相应的数据字典中。我们可以通过查询数据字典DBA_STMT_AUDIT_OPTS来查看具体的语句级审计实施细节。

如果我们不需要再进行审计,可以通过Noaudit命令取消审计,如:

noaudit table by bjmiadmin by access

•权限级审计

权限级审计表示只审计某一系统权限的使用状况,可以审计某个用户,也可以审计所有用户,其语法如下:

SQL>Audit 权限名称 [by 用户名] --表示只审计指定用户的SQL语句,不审计其他用户的SQL语句 [by session/access] --by session:每个会话相同语句只审计一次,系统默认; by access:每次都将审计 Whenever [NOT] Successful;--只审计(不)成功的语句

权限名称包含了大部分的对数据库对象的DDL操作,如alter,create,drop等等。例如:

audit delete any table

该命令将对任何用户的删除表的操作进行记录。如果想知道当前对哪些用户进行了哪些权限级别的审计,可以通过查询数据字典DBA_PRIV_AUDIT_OPTS来了解细节。

如果不需要再对用户进行系统权限的审计,那么可以使用noaudit命令取消对用户所进行的权限审计,如:

noaudit delete any table

•实体级审计

实体级审计用于监视所有用户对某一指定用户表的存取状况,实体级审计是不分用户的,其重点关注的是哪些用户对某一指定用户表的操作,其语法如下:

SQL>Audit 实体选项 ON Schema 实体名称 [by session/access] --by session:每个会话相同语句只审计一次,系统默认; by access:每次都将审计 Whenever [NOT] Successful;--只审计(不)成功的语句

各选项范围与语句级及权限级审计相同,例如:

audit update on bjmiadmin.deptinfo whenever successful

该命令将对bjmiadmin.deptinfo的更新操作进行记录。如果想知道当前对哪些用户的哪些实体进行了实体级审计及审计的选项,可以通过查询数据字典DBA_OBJ_AUDIT_OPTS来了解实施细节。

如果不需要再对用户进行系统权限的审计,那么可以使用noaudit命令取消对实体审计,如:

noaudit update on bjmiadmin.deptinfo

•触发器

触发器是一种特殊的过程,与普通的过程不同的是,触发器不需要显示调用,而是当某些事件发生时,由数据库系统自动执行。触发器的构成包括:

触发事件:引起触发器被触发的事件,如insert、update等DML语句或者create、alter、drop等DDL语句,数据库系统事件或者用户事件等等。

触发条件:由WHEN子句指定的一个逻辑表达式,只有当该表达式为TRUE时,遇到触发器事件才会自动执行触发器。

触发对象:包括表、视图、模式和数据库。

触发操作:触发器定义的过程。

在BJMI电子政务安全审计系统中,我们综合利用了多种触发器类型,如DDL触发器(对所有用户的DDL操作进行审计)、DML触发器(对重要的表和视图的DML操作进行审计,保存数据的历史和更新)、系统事件触发器(记录系统启动、退出或异常错误等)、用户事件触发器(用户登录系统或退出系统的动作)等。如下是实现系统事件审计的触发器:

CREATE OR REPLACE TRIGGER BJMIADMIN.AUDIT_DB_STARTUP_TRIGGER AFTER STARTUP ON DATABASE BEGIN INSERT INTO BJMIADMIN.AUDIT_DBLOG VALUES(SYSDATE,'STARTUP'); END;

数据库关闭触发器:

CREATE OR REPLACE TRIGGER BJMIADMIN.AUDIT_DB_SHUTDOWN_TRIGGER BEFORE SHUTDOWN ON DATABASE BEGIN INSERT INTO BJMIADMIN.AUDIT_DBLOG VALUES(SYSDATE,'SHUTDOWN'); END;

通过以上触发器的配置,我们可以得到数据库系统的启动和关闭动作的日志,对数据库系统的运转情况可以实现历史查看。这些历史记录将在应用系统层提供给审计管理员进行查看。

0
相关文章