1、FGA策略(细粒度审计)
DBMS_FGA是SYS用户的一个包
(1)增加 FGA 策略
-- 审计表
GRANT RESOURCE,CONNECT TO BANK IDENTIFIED BY BANK;
CREATE TABLE BANK.ACCOUNTS
(
ACCT_NO NUMBER PRIMARY KEY,
CUST_ID NUMBER NOT NULL ,
BALANCE NUMBER(15,2) NULL
);
insert into bank.accounts values(1,1,10000);
insert into bank.accounts values(2,2,20000);
commit;
Begin
dbms_fga.drop_policy (
object_schema=>'BANK',
object_name=>'ACCOUNTS',
policy_name=>'ACCOUNTS_ACCESS');
dbms_fga.add_policy (
object_schema=>'BANK',
object_name=>'ACCOUNTS',
policy_name=>'ACCOUNTS_ACCESS');
end;
/
select * from bank.accounts;
select timestamp, db_user,os_user,object_schema,object_name,sql_text from dba_fga_audit_trail;
-- 审计列和审计条件, 在add_policy中加入
-- audit_column => 'BALANCE'
-- audit_condition => 'BALANCE >= 11000'
Begin
dbms_fga.drop_policy (
object_schema=>'BANK',
object_name=>'ACCOUNTS',
policy_name=>'ACCOUNTS_ACCESS');
dbms_fga.add_policy (
object_schema=>'BANK',
object_name=>'ACCOUNTS',
audit_column => 'BALANCE',
audit_condition => 'BALANCE >= 11000',
policy_name=>'ACCOUNTS_ACCESS');
end;
/
select BALANCE from bank.accounts;
本文URL地址:http://www.bianceng.cn/database/Oracle/201410/45449.htm
select timestamp, db_user,os_user,object_schema,object_name,sql_text from dba_fga_audit_trail;
(2)管理 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
--演示何时审计操作以及何时不审计操作的各种情况 SQL 语句 审计状态
select balance from bank.accounts; 进行审计。用户选择了在添加策略时所指定的审计列 BALANCE。
select * from bank.accounts; 进行审计。即使用户没有明确指定列 BALANCE,* 也隐含地选择了它。
select cust_id from bank.accounts where balance < 10000; 进行审计。即使用户没有明确指定列 BALANCE,where 子句也隐含地选择了它。
select cust_id from bank.accounts; 不进行审计。用户没有选择列 BALANCE。
select count(*) from bank.accounts; 不进行审计。用户没有明确或隐含地选择列 BALANCE。
(3)处理器模块
-- FGA 的功能不只是记录审计线索中的事件;FGA 还可以任意执行过程。
-- 过程可以执行一项操作,比如当用户从表中选择特定行时向审计者发送电子邮件警告,或者可以写到不同的审计线索中。
-- 这种存储代码段可以是独立的过程或者是程序包中的过程,称为策略的处理器模块。
-- 实际上由于安全性原因,它不必与基表本身处于同一模式中,您可能希望特意将它放置在不同的模式中。
-- 由于只要 SELECT 出现时过程就会执行,非常类似于 DML 语句启动的触发器,您还可以将其看作 SELECT 语句触发器。
-- 以下参数指定将一个处理器模块指定给策略:
-- handler_schema 拥有数据过程的模式
-- handler_module 过程名称
-- 处理器模块还可以采用程序包的名称来代替过程名称。在这种情况下,参数 handler_module 在 package.procedure 的格式中指定。
(4)FGA 数据字典视图
-- FGA 策略的定义位于数据字典视图 DBA_AUDIT_POLICIES 中。
-- 审计线索收集在 SYS 拥有的表 FGA_LOG$ 中。对于 SYS 拥有的任何原始表,此表上的某些视图以对用户友好的方式显示信息。DBA_FGA_AUDIT_TRAIL 是该表上的一个视图。
-- 一个重要的列是 SQL_BIND,它指定查询中使用的绑定变量的值 — 这是显着增强该工具功能的一项信息。
-- 另一个重要的列是 SCN,当发生特定的查询时,它记录系统更改号。
-- 此信息用于识别用户在特定时间看到了什么,而不是现在的值,它使用了闪回查询,这种查询能够显示在指定的 SCN 值时的数据。