Oracle 9i新特性之细粒度访问原则
2007-05-11 12:23:19 来源:WEB开发网细粒度审计可以调用一个存储过程来作为审计过程的一部分。
如何进行细粒度审计
安全管理员用dbms_fga包来为有问题的表建立审计原则。
dbms_fga.add_policy(),dbms_fga.
enable_policy(),dbms_fga.disable_policy(),dbms_fga.drop_policy().
用表dba_audit_policies来列出已定义的原则。
用表dba_fga_audit_trail来放置审计纪录.这个表包括触发审计的用户名,SQL语句。
审计名称,会话ID号,时间戳,和其他一些属性。
管理员可以定义审计事件处理器来处理发生的时间,比如像管理员传送警告页。
下面列举一个新的细粒度原则的例子,从这个例子我们可以看出9I细粒度审计原则与8I的区别。
如果我们的原则设为:AUDIT_CONDITION='SALARY>10000'
这个时候我们看一下我们执行:
SELECT last_name,salary FROM employees WHERE last_name = ’Russell’
尽管我们选择的查询条件中没有包含SALARY列,但是由于我们的对SALARY列进行查询,如果RUSELL的SALARY值大于10000,那么这条记录将被审计。
审计纪录如下:
'SELECT LAST_NAME,SALARY FROM EMPLOYEES
WHERE LAST_NAME='RUSSELL',<TIMESTAMP>,<SCN>,
<USERNAME>,........
如果我们执行:
SELECT LAST_NAME,SALARY FROM EMPLOYEES WHERE SALARY<9000
那么尽管这条语句访问,查询了SALARY列,但是由于他访问的值未达到审计阀值,那么将不被审计。细粒度审计只对一个有WHERE条件的SELECT语句有效,并且只能设定一个被审计的列. 上面的查询语句触发的事件不是造成用户无法查询到这些语句,这些SALARY>10000实际上被返回 给查询用户,但是同时一个审计事件被写到审计跟踪里,包括完整的SQL语句,时间戳等信息。
细粒度审计并不自动的捕获返回给查询用户的查询结果,但是你可以用细粒度审计原则结合闪回
查询重建返回给用户的纪录.细粒度审计能够实现数据库系统的入侵监测功能.例如,开发人员可以为一个审计增加一个事件处理器来通知管理员,是否有被审计的事件发生.非SQL的访问是不被审计的,例如:如果你使用DIRECT PATH EXPORT,这种方式绕过了数据库的SQL层,审计条件将不被触发。
细粒度审计事件处理器
如何创建:
CREATE PROCEDURE catchlog
(schema_name VARCHAR2,table_name VARCHAR2,policy VARCHAR2)
AS BEGIN
-- send an alert note to my pager
UTIL_ALERT_PAGER(’CatchLog:’||Table_name||SYSDATE);
END;
/
如何添加:
DBMS_FGA.ADD_POLICY
( ...HANDLER_SCHEMA=>’HRMGR’, HANDLER_MODULE=>’CATCHLOG’);
细粒度审计事件处理器总结:
在上面的例子中,用户HRMGR创建了一个存储过程CATCHLOG,参数的类型和我们的例子必须一致,但是名字可以改变。审计事件处理器的添加需要一个拥有权限的用户。当第一个我们关心的行被取得时,审计事件纪录将被记录并存放下来,审计函数HRMGR.CATCHLOG被调用。
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接