ITPub博客

首页 > 数据库 > Oracle > oracle FGA的学习

oracle FGA的学习

原创 Oracle 作者:jolly10 时间:2007-09-21 16:59:10 0 删除 编辑

Oracle9i Database 推出了一种称为细粒度审计 (FGA) 的新特性,可以审计所有DML语句

[@more@]

Oracle9i Database 推出了一种称为细粒度审计 (FGA) 的新特性,可以审计所有DML语句

例示:
1.用sys帐号建立用户并赋权限
SQL>grant connect,resource to bank identified by bank;

2.登入bank帐号建立accounts表
create table accounts(
acct_no number not null,
cust_id number not null,
balance number(15,2));

3.用sys帐号建立审计规则
begin
dbms_fga.add_policy (
object_schema=>'BANK',
object_name=>'ACCOUNTS',
policy_name=>'ACCOUNTS_ACCESS'
);
end;

4.bank帐号查询accounts表
select * from bank.accounts;
(经测试sys用户查询此表时不会记录在审计信息中,其它用户访问时则会记录)

5.sys用户查询审计信息
SQL> select timestamp,
2 db_user,
3 os_user,
4 object_schema,
5 object_name,
6 sql_text
7 from dba_fga_audit_trail;

TIMESTAMP DB_USER OS_USER OBJECT_SCHEMA OBJECT_NAM SQL_TEXT
-------------- ---------- --------------- --------------- ---------- -----------------------------
21-9月 -07 BANK QHTLUJGuser BANK ACCOUNTS select * from accounts

可以增加审计列和审计条件,如下:
begin
dbms_fga.add_policy (
object_schema=>'BANK',
object_name=>'ACCOUNTS',
policy_name=>'ACCOUNTS_ACCESS',
audit_column => 'BALANCE',
audit_condition => 'BALANCE >= 11000'
);
end;


删除审计策略
begin
dbms_fga.drop_policy (
object_schema => 'BANK',
object_name => 'ACCOUNTS',
policy_name => 'ACCOUNTS_ACCESS'
);
end;


停用审计策略
begin
dbms_fga.enable_policy (
object_schema => 'BANK',
object_name => 'ACCOUNTS',
policy_name => 'ACCOUNTS_ACCESS',
enable => FALSE
);
end;
要重新启用它,可使用同一函数,但是将参数 enable 设置为 TRUE。


也可以对存储过程进行审计,用以下两个参数:
handler_schema 拥有数据过程的模式
handler_module 过程名称

FGA 数据字典视图
FGA 策略的定义位于数据字典视图 DBA_AUDIT_POLICIES 中。
审计线索收集在 SYS 拥有的表 FGA_LOG$ 中。DBA_FGA_AUDIT_TRAIL 是该表上的一个视图。


10G FGA的扩展

在 Oracle 9i Database 下,这个策略只能审计 SELECT 语句。然而,在 Oracle Database 10g 中,您可以扩展它,使它包含 INSERT、UPDATE 和 DELETE。您可以通过指定一个新的参数来实现这个目的:


statement_types => 'INSERT, UPDATE, DELETE, SELECT'

statement_type 参数默认情况下只审计 SELECT 语句。

在 FGA 审计线索中,获取赋值变量的值:audit_trail = DB_EXTENDED,停止获取audit_trail => DB,默认情况下,捕获赋值变量,这个参数的值为 DB_EXTENDED。


FGA 和常规审计:差异

如果标准审计和细粒度审计在 Oracle Database 10g 中是类似的,您可能要问,在什么情况下,FGA 将是更好的选择?好的,让我们研究一下它们的差异。


标准审计必须用参数 AUDIT_TRAIL 在数据库级启用。这个参数不是动态的;您必须重启数据库来使其生效。相比而言,FGA 不需要任何参数修改。


一旦被设置在一个对象上,标准审计将保持在那里。要解除它,您必须用 NOAUDIT 命令删除审计选项。这可能很不方便,因为在一个表上丢弃审计选项也将丢弃元数据信息。然而,FGA 可以临时禁用和启用,不丢失任何元数据信息。


FGA 只能够处理四种类型的语句:SELECT、INSERT、UPDATE 和 DELETE。相比而言,常规审计可以处理其它许多语句和权限,甚至会话连接和断开。


标准审计每次会话只创建一条记录(按会话)或每次访问对象创建一条记录(按访问)这种占用资源很少的方式对于控制审计线索表中的空间非常重要。FGA 并不是同样节省资源;它每次访问运行一次 — 使得线索更大。


通过记录线索,标准审计可以用来检测任何中断企图,如果企图没有成功,则将产生错误代码。而 FGA 不能。


标准审计可以写数据库表或 OS 文件。后者在审计员(不是数据库管理员)能够访问线索时非常有用。在 Windows 下,非数据库审计线索记录在事件日志中,并且可以用不同的方式对其进行访问。这个选项保护了审计线索的完整性。然而,FGA 日志仅写到数据库表 FGA_LOG$ 中。您可以在 FGA 中创建用户自定义的审计处理程序来写 OS 文件,但它们的完整性不能保证。


标准审计可以设置用于默认对象。当表是在运行期创建时,这个功能变得极为有用:默认的审计选项允许没有数据库管理员干预的审计。这在 FGA 中是不可能的,用户必须在一个现有的表上创建策略,上述的情况只能在表已创建之后才可能发生。


在 FGA 中,审计更加灵活 — 仅当访问某些列,当某个特定的条件为真时等等。这种多功能性在您需要控制线索的增长时非常方便。


在 FGA 中,SQL 赋值变量默认被捕获。在常规审计中,必须把初始化参数 audit_trail设为 db_extended,以启用这一功能。


权限差异:常规审计需要审计系统或语句权限;FGA 只需要 dbms_fga 程序包上的运行权限。

通过上面的比较,您将了解为什么可以证明 FGA 在某些情况下很有用。利用 Oracle Database 10g 中的增强的常规审计特性,一些以前认为不可能的任务 — 例如捕获赋值变量的值 — 变得十分容易。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/271283/viewspace-970829/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-02-20

  • 博文量
    263
  • 访问量
    775846