首页 > 开发 > 综合 > 正文

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

2024-07-21 02:08:27
字体:
来源:转载
供稿:网友


收集最实用的网页特效代码!


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

管理 fga 策略

在前文中您看到了如何添加 fga 策略。要删除策略,您可以使用以下语句:


begindbms_fga.drop_policy (object_schema => 'bank',object_name => 'accounts',policy_name => 'accounts_access' );end;



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

有时您可能需要临时禁用审计收集 — 例如,如果您希望将线索表移动到不同的表空间或者要删除线索表。您可以按如下方法禁用 fga 策略:


begindbms_fga.enable_policy (object_schema => 'bank',object_name => 'accounts',policy_name => 'accounts_access',enable => false );end;



要重新启用它,可使用同一函数,但是将参数 enable 设置为 true。

处理器模块

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

handler_schema 拥有数据过程的模式
handler_module 过程名称

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

fga 数据字典视图

fga 策略的定义位于数据字典视图 dba_audit_policies 中。表 2 包含该视图中一些重要列的简短描述。

审计线索收集在 sys 拥有的表 fga_log$ 中。对于 sys 拥有的任何原始表,此表上的某些视图以对用户友好的方式显示信息。dba_fga_audit_trail 是该表上的一个视图。表 3 包含该视图中重要列的简短描述。

一个重要的列是 sql_bind,它指定查询中使用的绑定变量的值 — 这是显著增强该工具功能的一项信息。

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

视图和 fga

到目前为止我已经讨论了在表上应用 fga;现在让我们来看如何在视图上使用 fga。假定在 accounts 表上定义视图 vw_accounts 如下:


create view vw_accounts as select * from accounts;



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


select * from vw_accounts;



您将看到以下审计线索:


select object_name, sql_text from dba_fga_audit_trail;object_name sql_text----------- -------------------------------------------------accounts select * from vw_accounts



注意,是基表名称而不是视图名称出现在 object_name 列中,因为视图中的选择是从基表中进行选择。但是,sql_text 列记录了用户提交
的实际语句,而这正是您希望了解的。 接下来的步骤


阅读有关 dbms_fga 程序包的更多信息

访问 oracle 数据库主页

访问 oracle 平台安全性主页




如果您只希望审计对视图的查询而不是对表的查询,可以对视图本身建立策略。通过将视图名称而不是表的名称传递给打包的过程 dbms_fga.add_policy 中的参数 object_name,可以完成这项工作。随后 dba_fga_audit_trail 中的 object_name 列将显示视图的名称,并且不会出现有关表访问的附加记录。

其它用途

除了记录对表的选择访问,fga 还可用于某些其它情况:

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



由于 fga 捕获绑定变量,它可以帮助您了解绑定变量值的模式,这有助于设计直方图集合等。



前文已经提到,处理器模块可以向审计者或 dba 发送警告,这有助于跟踪恶意应用程序。



由于 fga 可以作为 select 语句的触发器,您可以在需要这种功能的任何时候使用它。


结论

fga 使您在 oracle 数据库中支持隐私和职能策略。因为审计发生在数据库内部而不是应用程序中,所以无论用户使用的访问方法是什么(通过诸如 sql*plus 等工具或者应用程序),都对操作进行审计,允许进行非常简单的设置。

下一次我将讨论高级 fga 技术以及 oracle database 10g 中的新特性,这些特性使 fga 的功能极为强大,适用于所有类型的审计情况。

arup nanda ([email protected]) 是 intelliclaim 的首席数据库设计人员,该公司位于 connecticut 的 norwalk,提供对卫生保健保险索赔管理高度安全和基于规则的优化。他是 2003 年度 oracle dba 奖的获得者,并与他人合作编著了即将出版的 oracle 隐私安全性审计(rampant techpress 出版,2003)。

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



表 2:数据字典视图 dba_audit_policies 中重要的列 object_schema对其定义了 fga 策略的表或视图的所有者object_name表或视图的名称policy_name策略的名称 — 例如,accounts_accesspolicy_text在添加策略时指定的审计条件 — 例如,balance >= 11000policy_column审计列 — 例如,balanceenabled如果启用则为 yes,否则为 no pf_schema拥有策略处理器模块的模式(如果存在)pf_package处理器模块的程序包名称(如果存在)pf_function处理器模块的过程名称(如果存在)


表 3:dba_fga_audit_trail 视图中重要的列 session_id审计会话标识符;与 v$session 视图中的会话标识符不同timestamp审计记录生成时的时间标记db_user发出查询的数据库用户os_user操作系统用户userhost用户连接的机器的主机名client_id客户标识符(如果由对打包过程 dbms_session.set_identifier 的调用所设置)ext_name外部认证的客户名称,如 ldap 用户object_schema对该表的访问触发了审计的表所有者object_name对该表的 select 操作触发了审计的表名称policy_name触发审计的策略名称(如果对表定义了多个策略,则每个策略将插入一条记录。在此情况下,该列显示哪些行是由哪个策略插入的。)scn记录了审计的 oracle 系统更改号sql_text由用户提交的 sql 语句 sql_bind由 sql 语句使用的绑定变量(如果存在)

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表