首页 > 数据库 > Oracle > oracle FGA的学习
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博客 ” ,链接:https://blog.itpub.net/30336782/viewspace-2122293/ ,如需转载,请注明出处,否则将追究法律责任。