ファイングレイン監査をいじる。
権限付与→特定の表の特定列を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 件のコメント:
コメントを投稿