ITPub博客

首页 > 数据库 > Oracle > Oracle 统一审计- Best 实践五

Oracle 统一审计- Best 实践五

翻译 Oracle 作者:Haoword_wang 时间:2024-11-10 12:48:19 0 删除 编辑

继上一篇审计管理用户的介绍,我们接下来减少一下“Auditing Object Actions”即审计对象操作

六 审计对象操作

DBA可以使用CREATE AUDIT POLICY语句来审计对象操作。

6.1 审计对象操作

    DBA可以审计对特定对象执行的操作,例如HR上的UPDATE语句 HR.EMPLOYEES表。

     审计内容可以包括对象上使用的DDL和DML语句。一个统一的审计策略可以包含特权审计选项和操作审计选项,也可以为多个对象设置审计选项。

6.2 可审计的对象操作

     审计对象操作可以是广泛的,也可以是集中的(例如,审计所有用户操作或仅审计选定的用户操作列表)。

    如下 列出对象级标准数据库操作选项。SELECT SQL语句的审计策略将捕获READ操作和SELECT操作。



6.3 配置对象动作统一审计策略

     CREATE AUDIT POLICY语句中的ACTIONS子句创建捕获对象操作的策略。

     使用以下语法创建一个统一的审计策略,对对象的操作进行审计:

        语法:CREATE AUDIT POLICY policy_name  ACTIONS action1 [, action2 ON object1] [, action3 ON object2];

        案例:CREATE AUDIT POLICY my_simple_obj_policy ACTIONS SELECT ON OE.ORDERS, UPDATE ON HR.EMPLOYEES;
注意,DBA可以审计多个对象上的多个操作,如本例所示。

DBA可以构建复杂的对象动作统一审计策略,例如包含条件的审计策略。需要注意,在创建策略之后,必须使用AUDIT语句来启用它。


6.4 示例:审计SYS对象上的操作

     CREATE AUDIT POLICY语句可以审计SYS对象上的操作。

    如下 演示如何创建审计策略,对SYS上的SELECT语句进行审计。sys.USER$ 系统表。审计策略适用于所有用户,包括“SYS”和“SYSTEM”。

    CREATE AUDIT POLICY select_user_dictionary_table_pol ACTIONS SELECT ON SYS.USER$;
    AUDIT POLICY select_user_dictionary_table_pol;

6.5 示例:审计一个对象上的多个操作

     CREATE AUDIT POLICY语句可以审计一个对象上的多个操作。

    如下 展示了如何审计用户jrandolph和phhawkins在app_lib库上执行的多条SQL语句。

CREATE AUDIT POLICY actions_on_hr_emp_pol1 ACTIONS EXECUTE, GRANT  ON app_lib;
AUDIT POLICY actions_on_hr_emp_pol1 BY jrandolph, phawkins;

6.6 示例:审计对象上的GRANT和REVOKE操作

     CREATE AUDIT POLICY语句可以审计对象(如表)上的GRANT和REVOKE操作。

     用对对象上的GRANT操作的审计,也会自动启用对对象上的REVOKE操作的审计。

        CREATE AUDIT POLICY grant_revoke_pol ACTIONS GRANT ON HR.EMPLOYEES;
      要从UNIFIED_AUDIT_TRAIL数据字典视图中选择这种类型的策略,您可以执行类似于下面的查询。被授权者的名字(被授予特权的人)记录在TARGET_USER列中。AUDIT POLICY grant_revoke_pol;

        SELECT DBUSERNAME, OBJECT_PRIVILEGES, ACTION_NAME, OBJECT_SCHEMA, OBJECT_NAME, TARGET_USER FROM UNIFIED_AUDIT_TRAIL  WHERE ACTION_NAME IN ('GRANT', 'REVOKE');

6.7 示例:审计对象上的操作和权限

     CREATE AUDIT POLICY语句可以使用单个策略审计对象上的操作和特权。

    如下 显示了示例的一个变体,其中使用CREATE library特权的app_lib库上的所有EXECUTE和GRANT语句都被审计。

        CREATE AUDIT POLICY actions_on_hr_emp_pol2  PRIVILEGES CREATE LIBRARY  ACTIONS EXECUTE, GRANT ON app_lib;
        AUDIT POLICY actions_on_hr_emp_pol2 BY jrandolph, phawkins;
    DBA 可以审计目录对象。例如,假设您创建了一个目录对象,其中包含ORACLE_LOADER访问驱动程序将使用的预处理器程序。您可以审计在此目录对象中运行此程序的任何人。

6.8 示例:审计表上的所有操作

     CREATE AUDIT POLICY语句可以审计表上的所有操作。

     可以使用ALL关键字对所有动作进行审计。Oracle建议您只审计敏感对象上的所有操作。ALL很有用,因为它捕获了间接的SELECT操作。例27-10展示了如何审计HR上的所有动作。EMPLOYEES表,除了用户mulligan的操作。

    CREATE AUDIT POLICY all_actions_on_hr_emp_pol  ACTIONS ALL ON HR.EMPLOYEES;
    AUDIT POLICY all_actions_on_hr_emp_pol EXCEPT pmulligan;

6.9 示例:审计数据库中的所有操作

     CREATE AUDIT POLICY语句可以审计数据库中的所有操作。

     为了防止生成大量审计记录并迅速填满审计跟踪的情况,即使对于此审计策略配置的所有递归操作,也要在CREATE audit policy语句中包含ONLY TOPLEVEL子句。作为ONLY TOPLEVEL的替代方案,您可以使用条件来创建ACTIONS ALL策略,以便仅捕获记录的子集。

     注意:谨慎使用ACTIONS ALL审计。不要为必须执行联机事务处理(OLTP)工作负载的用户启用它。这将避免产生大量的审计记录。

    CREATE AUDIT POLICY all_actions_pol ACTIONS ALL ONLY TOPLEVEL;
    AUDIT POLICY all_actions_pol;

6.10 对象行为统一审计策略如何出现在审计跟踪中

     UNIFIED_AUDIT_TRAIL数据字典视图列出了对象操作审计事件。

    SELECT ACTION_NAME, OBJECT_SCHEMA, OBJECT_NAME FROM UNIFIED_AUDIT_TRAIL WHERE DBUSERNAME = 'SYS';
ACTION_NAME OBJECT_SCHEMA OBJECT_NAME
----------- ------------- ------------
SELECT      HR            EMPLOYEES

6.11 审计函数、过程、包和触发器

    DBA可以审计函数、过程、PL/SQL包和触发器。

     DBA可以审核的领域如下:

        可以单独审计独立函数、独立过程和PL/SQL包。

        如果审计一个PL/SQL包,Oracle数据库将审计包中的所有函数和过程。

        如果为所有执行启用审计,Oracle数据库将审计数据库中的所有触发器,以及PL/SQL包中的所有函数和过程。

        不能审计PL/SQL包中的单个函数或过程。

        当审计PL/SQL存储过程或存储函数上的EXECUTE操作时

6.12 Oracle虚拟私有数据库谓词审计

     统一审计跟踪自动捕获Oracle Virtual Private Database (VPD)策略中使用的谓词。

     不需要创建统一的审计策略来获取VPD谓词审计信息。

    这种类型的审计使DBA能够识别作为DML操作的一部分运行的谓词表达式,从而帮助DBA识别可能作为DML操作的一部分发生的其他操作。例如,如果对数据库的恶意攻击是使用VPD谓词执行的,那么您可以使用统一审计跟踪来跟踪攻击。除了来自用户创建的VPD策略的谓词之外,还有来自Oracle Label Security和Oracle Real Application Sec的内部谓词

下面的示例展示了如何审计VPD策略的谓词:

1.Create the following VPD policy function:

CREATE OR REPLACE FUNCTION auth_orders(
  schema_var IN VARCHAR2,
  table_var  IN VARCHAR2
 )
 RETURN VARCHAR2
 IS
  return_val VARCHAR2 (400);
 BEGIN
  return_val := 'SALES_REP_ID = 159';
  RETURN return_val;
 END auth_orders;
/

2.Create the following VPD policy:

BEGIN
  DBMS_RLS.ADD_POLICY (
    object_schema    => 'oe',
    object_name      => 'orders',
    policy_name      => 'orders_policy',
    function_schema  => 'sec_admin',
    policy_function  => 'auth_orders',
    statement_types  => 'select, insert, update, delete'
   );
 END;
/

3.Create and enable the following the unified audit policy:

 CREATE AUDIT POLICY oe_pol  ACTIONS SELECT ON OE.ORDERS;
 AUDIT POLICY oe_pol;

4.Connect as user OE and query the OE.ORDERS table.                             

CONNECT OE
Enter password: password
SELECT COUNT(*) FROM ORDERS;

5.Connect as a user who has been granted the AUDIT_ADMIN role, and then query the UNIFIED_AUDIT_TRAIL data dictionary view.                           CONNECT sec_admin
Enter password: password
SELECT RLS_INFO FROM UNIFIED_AUDIT_TRAIL;  

Output similar to the following should appear:

((POLICY_TYPE=[3]'VPD'),(POLICY_SCHEMA=[9]'SEC_ADMIN'),(POLICY_NAME=[13]'ORDERS_POLICY'),(PREDICATE=[16]'SALES_REP_ID=159'));

6.To extract these details and add them to their own columns, run the appropriate function from the DBMS_AUDIT_UTIL PL/SQL package.

For unified auditing, you must run the DBMS_AUDIT_UTIL.DECODE_RLS_INFO_ATRAIL_UNI function.

For example:

SELECT DBUSERNAME, ACTION_NAME, OBJECT_NAME, SQL_TEXT,
  RLS_PREDICATE, RLS_POLICY_TYPE, RLS_POLICY_OWNER, RLS_POLICY_NAME
  FROM TABLE (DBMS_AUDIT_UTIL.DECODE_RLS_INFO_ATRAIL_UNI
  (CURSOR (SELECT * FROM UNIFIED_AUDIT_TRAIL)));

The reformatted audit trail output appears similar to the following:

DBUSERNAME ACTION_NAME OBJECT_NAME SQL_TEXT
---------- ----------- ----------- ---------------------------
RLS_PREDICATE       RLS_POLICY_TYPE RLS_POLICY_OWNER RLS_POLICY_NAME
------------------ ---------------  ---------------- ---------------
OE         SELECT      ORDERS      SELECT COUNT(*) FROM ORDERS
SALES_REP_ID = 159  VPD             SEC_ADMIN        ORDERS_POLICY

6.13 Oracle虚拟私有数据库策略功能审计策略

     审计可以影响动态VPD策略、静态VPD策略和上下文敏感的VPD策略。

         动态策略:Oracle数据库计算两次策略函数,一次在SQL语句解析期间,另一次在执行期间。因此,为每个评估生成两个审计记录。

        静态策略:Oracle数据库计算一次策略函数,然后将其缓存在SGA中。因此,只生成一条审计记录。

        上下文敏感策略:Oracle数据库在语句解析期间执行一次策略功能。因此,只生成一条审计记录。

6.14 使用编辑对象进行统一审计

     当一个已编辑的对象具有统一的审计策略时,它将应用于该对象可见的所有版本。

     当一个已编辑的对象被实现时,附加到它的任何统一审计策略都是新附加到新的实际事件的。当您对继承的已编辑对象新应用统一审计策略时,此操作将实现该策略。

可以通过查询UNIFIED_AUDIT_TRAIL数据字典视图中的OBJECT_NAME和OBJ_EDITION_NAME列来查找审计对象出现的版本。


参考文档:

Oracle 关于审计对象操作介绍

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26342786/viewspace-3048242/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle Postgresql MySQL DBA,DEVOPS 开发人员

注册时间:2013-03-03

  • 博文量
    73
  • 访问量
    69193