演習: 現在のユーザーへの統合監査ポリシーの強制

この演習では、統合監査ポリシーがSQL文を実行する現在のユーザーにどのように強制されるかを示します。

  1. 新しい演習を開始する前に、演習の環境の推奨事項を参照してください。
  2. /home/oracle/labs/M104781GC10/setup_audit_policies.shシェル・スクリプトを使用して、PDB20U1.PROCEMPプロシージャを作成します。このスクリプトでは、ユーザーU1およびU2も作成します。
    $ cd /home/oracle/labs/M104781GC10
    $ /home/oracle/labs/M104781GC10/setup_audit_policies.sh
    ...
    SQL*Plus: Release 20.0.0.0.0 - Production on Fri Dec 13 05:55:55 2019
    Version 20.2.0.0.0
    
    Copyright (c) 1982, 2019, Oracle.  All rights reserved.
    
    Connected to:
    Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
    Version 20.2.0.0.0
    
    SQL> drop user u1 cascade;
    drop user u1 cascade
              *
    ERROR at line 1:
    ORA-01918: user 'U1' does not exist
    
    SQL> drop user u2 cascade;
    drop user u2 cascade
              *
    ERROR at line 1:
    ORA-01918: user 'U2' does not exist
    
    SQL> create user u1 identified by password;
    
    User created.
    
    SQL> grant create session, create procedure to u1;
    
    Grant succeeded.
    
    SQL> create user u2 identified by password;
    
    User created.
    
    SQL> grant select on hr.employees to u1, u2;
    
    Grant succeeded.
    
    SQL> grant create session to u2;
    
    Grant succeeded.
    
    SQL> grant select on unified_audit_trail to u1,u2;
    
    Grant succeeded.
    
    SQL>
    SQL> CREATE OR REPLACE PROCEDURE u1.procemp (employee_id IN NUMBER)
      2  AS
      3     v_emp_id  NUMBER:=employee_id;
      4     v_sal NUMBER;
      5  BEGIN
      6     SELECT salary INTO v_sal FROM hr.employees WHERE employee_id=v_emp_id;
      7     dbms_output.put_line('Salary is : '||v_sal || ' for Employee ID: '||v_emp_id);
      8  END procemp;
      9  /
    
    Procedure created.
    
    SQL>
    SQL> grant execute on u1.procemp to u2;
    
    Grant succeeded.
    
    SQL>
    SQL> exit
    Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
    Version 20.2.0.0.0
    $
  3. PDB20で、ログイン・ユーザーU2が実行したHR.EMPLOYEES表に対する問合せを監査するために、監査ポリシーを作成して有効にします。
    $ sqlplus system@PDB20
    
    SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 3 14:44:59 2020
    Version 20.2.0.0.0
    
    Copyright (c) 1982, 2019, Oracle.  All rights reserved.
    
    Enter password: password
    
    Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
    Version 20.2.0.0.0
    
    SQL> CREATE AUDIT POLICY pol_emp ACTIONS select on hr.employees;
    
    Audit policy created.
    
    SQL> AUDIT POLICY pol_emp BY u2;
    
    Audit succeeded.
    
    SQL>
  4. ユーザーU2としてPDB20に接続し、U1.PROCEMPプロシージャを実行します。
    SQL> CONNECT u2@PDB20
    Enter password: password
    SQL> SET SERVEROUTPUT ON
    SQL> EXECUTE u1.procemp(206)
    Salary is : 8300 for Employee ID: 206
    
    PL/SQL procedure successfully completed.
    
    SQL>
  5. DBUSERNAME (ログイン・ユーザー)およびプロシージャを実行したユーザーであるCURRENT_USERを統合監査証跡から表示します。
    SQL> SELECT dbusername, current_user, action_name
         FROM   unified_audit_trail
         WHERE  unified_audit_policies = 'POL_EMP';
    
    no rows selected
    
    SQL> EXIT
    $

    注意:

    統合監査ポリシーがSQL文を実行した現在のユーザーU1に強制されていることに注目します。U2のみが監査され、U1は問合せを実行している現在のユーザーであるため、トップレベルのユーザー・セッションを所有しているユーザーが文を実行しているという印象を監査者に与える監査レコードは生成されません。