2014年3月10日月曜日

【Oracle】ファイングレイン監査

ファイングレイン監査をいじる。

権限付与→特定の表の特定列をselectしたときなどのみ、監査証跡が残るように設定。

#権限付与
GRANT EXECUTE ON DBMS_FGA TO sysadmin_fga;

#監査ポリシーの追加。ここでは、EMPLOYEES表のempolyee_id=100というselect文が投げられたときのみレコードを残す、という設定を加える

BEGIN
 DBMS_FGA.ADD_POLICY(
   OBJECT_SCHEMA => 'HR',
   OBJECT_NAME                     => 'EMPLOYEES',
   POLICY_NAME                     => 'AUDIT_EMPS_JOBID',
   ENABLE                          => True,
   STATEMENT_TYPES                 => 'SELECT',
   audit_column                    => 'EMPLOYEE_ID',
   audit_condition            =>  'EMPLOYEE_ID=100');
END;
/


#テスト。実際にselectしてみる。(監査として結果が残っているかどうかは最後でみることにする)

select EMPLOYEE_ID from hr.employees where EMPLOYEE_ID=100;


#ポリシー削除(ごみがたまるのがいやなので、こまめに消す・・・)
begin
DBMS_FGA.DROP_POLICY(
  object_schema      => 'HR',
  object_name        => 'EMPLOYEES',
  policy_name        => 'AUDIT_EMPS_JOBID');
end;
/


#違うポリシーを作成する。今度はとにかくsalary列をselectされたら監査レコードを追加するようなポリシー。
BEGIN
 DBMS_FGA.ADD_POLICY(
   OBJECT_SCHEMA => 'HR',
   OBJECT_NAME                     => 'EMPLOYEES',
   POLICY_NAME                     => 'AUDIT_EMPS_SALARY',
   STATEMENT_TYPES                 => 'SELECT',
   audit_column   => 'SALARY');
END;
/

#テスト。
select salary from hr.employees;

#ポリシー削除
begin
DBMS_FGA.DROP_POLICY(
  object_schema      => 'HR',
  object_name        => 'EMPLOYEES',
  policy_name        => 'AUDIT_EMPS_SALARY');
end;
/


#監査の証拠が残っているかを確認

SYS@PROD1 > select SESSIONID,TIMESTAMP#,POLICYNAME,LSQLTEXT ,STATEMENT from SYS.FGA_LOG$;

 SESSIONID TIMESTAM POLICYNAME                     LSQLTEXT                                                                          STATEMENT
---------- -------- ------------------------------ -------------------------------------------------------------------------------- ----------
    104650          AUDIT_EMPS_SALARY              select salary from hr.employees                                                          14
    104732          AUDIT_EMPS_SALARY              select SALARY,job_id from hr.employees                                                   10
    104732          AUDIT_EMPS_JOBID               select EMPLOYEE_ID from hr.employees where EMPLOYEE_ID=100                               28


→残っていることを確認!



<参考手順>
Oracle® Databaseセキュリティ・ガイド
http://docs.oracle.com/cd/E16338_01/network.112/b56285/auditing.htm#CEGBAFIA

0 件のコメント:

コメントを投稿