数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
现实中的细粒度审计(2)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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

管理 FGA 策略

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

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

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

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

begin
dbms_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_ACCESS
POLICY_TEXT 在添加策略时指定的审计条件 — 例如,BALANCE >= 11000
POLICY_COLUMN 审计列 — 例如,BALANCE
ENABLED 如果启用则为 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 语句使用的绑定变量(如果存在)

 




相关文章

相关软件