分区细粒度访问控制 例如:在一个控制环境中这个特性被用来控制两个公司对sales表的访问每一个公司拥有的独立的应用程序sell_it和prod_opt需要拥有不同的安全策略第一个公司的sell_it应用程序认证的用户需要只能访问表中来自他们相同地区的记录;那就是salescust_id+untry的联合校验必须符合这个用户的地区相吻合第二个公司的prod_opt应用程序的访问权限被设置为只能访问最近事务提交的记录上也就是与salestime_id相关联在i中在一个细粒度访问控制中拥有这两个策略将需要开发公司共同协作部署如果两个产品来自竞争的两个公司这实际上是不可行的依靠定义应用程序设置来强行控制对基本objects的一些特殊规定每一个应用程序现在能够实现一系列私有的安全策略 二:细粒度审计 一个提供扩展的入侵检测捕获sql执行语句而不是返回数据的工具 可以将审计策略捆绑在带有where条件的select语句的表或视图上 oracle用自治事务来处理用户自定义的审计事件 一个基于列的审计特性减少了错误审计的发生 数据库管理系统中的审计经常被用来监控数据的访问审计纪录是验证违反数据访问权限的基础新的细粒度审计机制从事于执行更细小级别的审计 新的审计原则是基于简单的用户定义关于表的查询条件的sql谓词 谓词可以在当查询结果中返回了指定的值得时候进行审计 在基于查询值的审计中也有一些情形下管理员只关心某一个特定的被引用和访问列情况因为无论一个列的查询审计发生在dml的任何部分都可以进行审计所以oracle对这个查询的审计将不存在任何问题 在i中审计项只能被设置用来监控对对象的访问权只有一些固定的情况比如用户id时间戳对象名称会被记录在审计跟蹤里 细粒度审计可以调用一个存储过程来作为审计过程的一部分 如何进行细粒度审计 安全管理员用dbms_fga包来为有问题的表建立审计原则 dbms_fgaadd_policy()dbms_fgaenable_policy()dbms_fgadisable_policy()dbms_fgadrop_policy() PROCEDURE ADD_POLICY 参数名称 类型输入/输出默认值? OBJECT_SCHEMAVARCHARIN DEFAULT OBJECT_NAMEVARCHARIN POLICY_NAMEVARCHARIN AUDIT_CONDITIONVARCHARIN DEFAULT AUDIT_COLUMN VARCHARIN DEFAULT HANDLER_SCHEMA VARCHARIN DEFAULT HANDLER_MODULE VARCHARIN DEFAULT ENABLE BOOLEAN IN DEFAULT PROCEDURE DISABLE_POLICY 参数名称 类型输入/输出默认值? OBJECT_SCHEMAVARCHARIN DEFAULT OBJECT_NAMEVARCHARIN POLICY_NAMEVARCHARIN PROCEDURE DROP_POLICY 参数名称 类型输入/输出默认值? OBJECT_SCHEMAVARCHARIN DEFAULT OBJECT_NAMEVARCHARIN POLICY_NAMEVARCHARIN PROCEDURE ENABLE_POLICY 参数名称 类型输入/输出默认值? OBJECT_SCHEMAVARCHARIN DEFAULT OBJECT_NAMEVARCHARIN POLICY_NAMEVARCHARIN ENABLE BOOLEAN IN DEFAULT 用表dba_audit_policies来列出已定义的原则 用表dba_fga_audit_trail来放置审计纪录这个表包括触发审计的用户名SQL语句 审计名称会话ID号时间戳和其他一些属性 管理员可以定义审计事件处理器来处理发生的时间比如像管理员传送警告页 下面列举一个新的细粒度原则的例子从这个例子我们可以看出I细粒度审计原则与I的区别 如果我们的原则设为:AUDIT_CONDITION=SALARY> 这个时候我们看一下我们执行 SELECT last_namesalary FROM employees WHERE last_name = Russell 尽管我们选择的查询条件中没有包含SALARY列但是由于我们的对SALARY列进行查询如果RUSELL的SALARY值大于那么这条记录将被审计 审计纪录如下 SELECT LAST_NAMESALARY FROM EMPLOYEES WHERE LAST_NAME=RUSSELL<TIMESTAMP><SCN> <USERNAME> 如果我们执行 SELECT LAST_NAMESALARY FROM EMPLOYEES WHERE SALARY< 那么尽管这条语句访问查询了SALARY列但是由于他访问的值未达到审计阀值那么将不被审计 细粒度审计只对一个有WHERE条件的SELECT语句有效并且只能设定一个被审计的列 上面的查询语句触发的事件不是造成用户无法查询到这些语句这些SALARY>实际上被返回 给查询用户但是同时一个审计事件被写到审计跟蹤里包括完整的SQL语句时间戳等信息 细粒度审计并不自动的捕获返回给查询用户的查询结果但是你可以用细粒度审计原则结合闪回 查询重建返回给用户的纪录 细粒度审计能够实现数据库系统的入侵监测功能例如开发人员可以为一个审计增加一个事件处理器来通知管理员是否有被审计的事件发生非SQL的访问是不被审计的例如:如果你使用DIRECT PATH EXPORT这种方式绕过了数据库的SQL层审计条件将不被触发 细粒度审计事件处理器 如何创建 CREATE PROCEDURE catchlog (schema_name VARCHARtable_name VARCHARpolicy VARCHAR) AS BEGIN send an alert note to my pager UTIL_ALERT_PAGER(CatchLog:||Table_name||SYSDATE); END; / 如何添加 DBMS_FGAADD_POLICY ( HANDLER_SCHEMA=>HRMGR HANDLER_MODULE=>CATCHLOG); 细粒度审计事件处理器总结: 在上面的例子中用户HRMGR创建了一个存储过程CATCHLOG参数的类型和我们的例子必须 一致但是名字可以改变 审计事件处理器的添加需要一个拥有权限的用户 当第一个我们关心的行被取得时审计事件纪录将被记录并存放下来审计函数HRMGRCATCHLOG 被调用 |