现实中的细粒度审计(2)



现实中细粒度审计(2)

=parahead1>管理 FGA 策略

=bodycopy>在前文中您看到了如何添加 FGA 策略要删除策略您可以使用以下语句:

begindbms_fga.drop_policy (object_schema => \'BANK\',object_name => \'ACCOUNTS\',policy_name => \'ACCOUNTS_ACCESS\' );end;



=bodycopy>对于更改策略而言没有随取随用解决方案要更改策略中任何参数必须删除策略再使用更改后参数添加策略

=bodycopy>有时您可能需要临时禁用审计收集 — 例如如果您希望将线索表移动到区别表空间或者要删除线索表您可以按如下思路方法禁用 FGA 策略:

begindbms_fga.enable_policy (object_schema => \'BANK\',object_name => \'ACCOUNTS\',policy_name => \'ACCOUNTS_ACCESS\',enable => FALSE );end;



=bodycopy>要重新启用它可使用同但是将参数 enable=bodycopy> 设置为 TRUE

=parahead1>处理器模块

=bodycopy>FGA 功能不只是记录审计线索中事件;FGA 还可以任意执行过程过程可以执行项操作比如当用户从表中选择特定行时向审计者发送电子邮件警告或者可以写到区别审计线索中这种存储代码段可以是独立过程或者是包中过程称为策略=italicbodycopy>处理器模块=bodycopy>实际上由于安全性原因它不必和基表本身处于同模式中您可能希望特意将它放置在区别模式中由于只要 SELECT=bodycopy> 出现时过程就会执行非常类似于 DML 语句启动触发器您还可以将其看作 SELECT=bodycopy> 语句触发器以下参数指定将个处理器模块指定给策略:

handler_schema=bodycopy> 拥有数据过程模式
handler_module=bodycopy> 过程名称

=bodycopy>处理器模块还可以采用名称来代替过程名称在这种情况下参数 handler_module =bodycopy>在 package.procedure=bodycopy> 格式中指定

=parahead1>FGA 数据字典视图

=bodycopy>FGA 策略定义位于数据字典视图 DBA_AUDIT_POLICIES 中=bodylink>表 2 包含该视图中些重要列简短描述

=bodycopy>审计线索收集在 SYS 拥有表 FGA_LOG$ 中对于 SYS 拥有任何原始表此表上某些视图以对用户友好方式显示信息DBA_FGA_AUDIT_TRAIL 是该表上个视图=bodylink>表 3 包含该视图中重要列简短描述

=bodycopy>个重要列是 SQL_BIND它指定查询中使用绑定变量值 — 这是显著增强该工具功能项信息

=bodycopy>另个重要列是 SCN当发生特定查询时它记录系统更改号此信息用于识别用户=italicbodycopy>在特定时间=bodycopy>看到了什么而不是=italicbodycopy>现在=bodycopy>它使用了闪回查询这种查询能够显示在指定 SCN 值时数据我将在本系列第 2 部分中详细介绍说明这种功能强大特性

=parahead1>视图和 FGA

=bodycopy>到目前为止我已经讨论了在表上应用 FGA;现在让我们来看如何在视图上使用 FGA假定在 ACCOUNTS 表上定义视图 VW_ACCOUNTS 如下:

create view vw_accounts as select * from accounts;



=bodycopy>现在如果用户从视图中而不是从表中进行选择:

select * from vw_accounts;



=bodycopy>您将看到以下审计线索:

select object_name, sql_text from dba_fga_audit_trail;OBJECT_NAME SQL_TEXT----------- -------------------------------------------------ACCOUNTS select * from vw_accounts



=bodycopy>注意是基表名称而不是视图名称出现在 OBJECT_NAME 列中视图中选择是从基表中进行选择但是SQL_TEXT 列记录了用户提交
实际语句而这正是您希望了解
=parahead1>接下来步骤


=bodycopy>=bodylink>阅读有关 DBMS_FGA 更多信息

=bodycopy>=bodycopy>=bodylink>访问 Oracle 数据库主页

=bodycopy>=bodycopy>=bodylink>访问 Oracle 平台安全性主页








=bodycopy>如果您只希望审计对视图查询而不是对表查询可以对视图本身建立策略通过将视图名称而不是表名称传递给打包过程 dbms_fga.add_policy

=bodycopy> 中参数 object_name=bodycopy>可以完成这项工作随后 DBA_FGA_AUDIT_TRAIL 中 OBJECT_NAME 列将显示视图名称并且不会出现有关表访问附加记录

=parahead1>其它用途

=bodycopy>除了记录对表选择访问FGA 还可用于某些其它情况:

  • =bodycopy>您可以对数据仓库使用 FGA以捕获特定表、视图或物化视图上发生所有语句这有助于计划索引您不需要到 V$SQL 视图去获取这些信息即使 SQL 语句已经超出了 V$SQL 期限在 FGA 审计线索中将会始终提供它



  • =bodycopy>由于 FGA 捕获绑定变量它可以帮助您了解绑定变量值模式这有助于设计直方图集合等



  • =bodycopy>前文已经提到处理器模块可以向审计者或 DBA 发送警告这有助于跟踪恶意应用



  • =bodycopy>由于 FGA 可以作为 SELECT=bodycopy> 语句=italicbodycopy>触发器=bodycopy>您可以在需要这种功能任何时候使用它


=parahead1>结论

=bodycopy>FGA 使您在 Oracle 数据库中支持隐私和职能策略审计发生在数据库内部而不是应用所以无论用户使用访问思路方法是什么(通过诸如 SQL*Plus 等工具或者应用)都对操作进行审计允许进行非常简单设置

=bodycopy>下次我将讨论高级 FGA 技术以及 Oracle Database 10g新特性这些特性使 FGA 功能极为强大适用于所有类型审计情况

=italicbodycopy>Arup Nanda (=bodylink>[email protected]) 是 IntelliClaim 首席数据库设计人员该公司位于 Connecticut Norwalk提供对卫生保健保险索赔管理高度安全和基于规则优化他是 2003 年度 Oracle DBA 奖获得者并和他人合作编著了即将出版 =bodycopy>=bodylink>Oracle 隐私安全性审计=italicbodycopy>(Rampant TechPress 出版2003)

=bodycopy>表 1:演示何时审计操作以及何时不审计操作各种情况 =boldbodycopy>SQL 语句 =boldbodycopy>审计状态
select balance from accounts; =bodycopy>进行审计用户选择了在添加策略时所指定审计列 BALANCE
select * from accounts; =bodycopy>进行审计即使用户没有明确指定列 BALANCE* 也隐含地选择了它
select cust_id from accounts where balance < 10000; =bodycopy>进行审计即使用户没有明确指定列 BALANCEwhere 子句也隐含地选择了它
select cust_id from accounts; =bodycopy>不进行审计用户没有选择列 BALANCE
select count(*) from accounts; =bodycopy>不进行审计用户没有明确或隐含地选择列 BALANCE





=bodycopy>表 2:数据字典视图 DBA_AUDIT_POLICIES 中重要 =bodycopy>OBJECT_SCHEMA =bodycopy>对其定义了 FGA 策略表或视图所有者
=bodycopy>OBJECT_NAME =bodycopy>表或视图名称
=bodycopy>POLICY_NAME =bodycopy>策略名称 — 例如ACCOUNTS_ACCESS
=bodycopy>POLICY_TEXT =bodycopy>在添加策略时指定审计条件 — 例如BALANCE >= 11000
=bodycopy>POLICY_COLUMN =bodycopy>审计列 — 例如BALANCE
=bodycopy>ENABLED =bodycopy>如果启用则为 YES否则为 NO =bodycopy>PF_SCHEMA =bodycopy>拥有策略处理器模块模式(如果存在)


=bodycopy>PF_PACKAGE =bodycopy>处理器模块包名称(如果存在)
=bodycopy>PF_FUNCTION =bodycopy>处理器模块过程名称(如果存在)



=bodycopy>表 3:DBA_FGA_AUDIT_TRAIL 视图中重要 =bodycopy>SESSION_ID =bodycopy>审计会话标识符;和 V$SESSION 视图中会话标识符区别
=bodycopy>TIMESTAMP =bodycopy>审计记录生成时时间标记
=bodycopy>DB_USER =bodycopy>发出查询数据库用户
=bodycopy>OS_USER =bodycopy>操作系统用户
=bodycopy>USERHOST =bodycopy>用户连接机器主机名
=bodycopy>CLIENT_ID =bodycopy>客户标识符(如果由对打包过程 dbms_session._identier 所设置)
=bodycopy>EXT_NAME =bodycopy>外部认证客户名称如 LDAP 用户
=bodycopy>OBJECT_SCHEMA =bodycopy>对该表访问触发了审计表所有者
=bodycopy>OBJECT_NAME =bodycopy>对该表 SELECT=bodycopy> 操作触发了审计表名称
=bodycopy>POLICY_NAME =bodycopy>触发审计策略名称(如果对表定义了多个策略则每个策略将插入条记录在此情况下该列显示哪些行是由哪个策略插入)
=bodycopy>SCN =bodycopy>记录了审计 Oracle 系统更改号
=bodycopy>SQL_TEXT =bodycopy>由用户提交 SQL 语句
=bodycopy>SQL_BIND =bodycopy>由 SQL 语句使用绑定变量(如果存在)



=bodycopy>

Tags: 

延伸阅读

最新评论

发表评论