Skip Headers
Oracle® Identity Manager Audit Report Developer's Guide
Release 9.0
B28760-01
  Go To Documentation Library
Home
Go To Table Of Contents
Contents
Go To Index
Index

Previous
Previous
 
Next
Next
 

2 Oracle Identity Manager User Profile Auditing

User profile audit stores information about changes in the user profile, user membership, resource provisioning, access policies, and resource forms.

This chapter discusses user profile auditing in the following sections:

Data Collected

By default, User Profile Audit is enabled (when installing with Audit and Compliance module) and the auditing level is set to Resource From. The auditing level is configurable and specifies the minimum level required for attestation on form data.

The XL.UserProfileAuditDataCollection keyword in System Properties in the Oracle Identity Manager Administrative and User Console determines the audit level. See Audit Levels in this chapter for more detailed information. This section covers the following topics:

Capture and Archiving of User Profile Data

The system takes a snapshot of a user profile and stores that snapshot in an audit table in the database. Oracle Identity Manager updates the snapshot any time the user data changes.

The following outline describes what constitutes a saved user profile. It also provides information about the tables that make up these components.

  • User Record: USR table, including all User Defined Files (UDFs)

  • User Group Membership: USG, UGP, and RUL information

  • User Policy Profile: UPP and UPD information

User Resource Profile, which consists of:

  • User Resource Instance: OIU, OBI , OST, and OBJ information

  • Resource Lifecycle (Provisioning) Process: ORC, PKG, TOS, STA: OSI, SCH , MIL

  • Resource State (Process) Form: UD_* (including child tables)

The snapshot for a user profile contains all the previous data for a particular user.

XML Representation of the User Profile Snapshot

The snapshot and changes are saved as XML strings. Representing them in XML makes for easy readability and understanding of what events happened to update the snapshot. The following sections include examples of the XML in the snapshot and changes field in the UPA table.

Snapshot XML File

The snapshot XML describes all the attributes for a given user. All the attributes are related to the user profile. The top most tag is UserProfileSnapshot. Within this tag, there are a key and version. These store user key and version information for each XML entry. Each of the subsequent tags store information about the user profile:

  • UserInfo: Information about the user profile itself

  • GroupMembership: Information about the group membership

  • PolicyProfile: Information about what policy allowed which resource provisioning

  • ResourceProfile: Information about all the provisioned resources

    • ResourceInstance: Information on each of the resources provisioned to the user

    • ProcessData: Information about the data stored in the UDFs

The following code snippet is an example of an XML snapshot.

  <?xml version="1.0" encoding="ISO-8859-1" ?> - <UserProfileSnapshot key="202" version="1.0">- <UserInfo>    <Attribute name="Users.First Name">Testing02First</Attribute>     <Attribute name="Users.Role">Full-Time</Attribute>     <Attribute name="Users.Disable User">0</Attribute>     <Attribute name="Users.Email">amol@thortech.com</Attribute>     <Attribute name="Users.Status">Active</Attribute>     <Attribute name="Users.Update Date">2006-01-05 17:12:25.181</Attribute>     <Attribute name="Users.User ID">TESTING02USER9</Attribute>     <Attribute name="Users.Xellerate Type">End-User</Attribute>     <Attribute name="Users.Last Name">Testing02Last</Attribute>     <Attribute name="Users.Provisioned Date">2006-01-05 17:11:56.868</Attribute>     <Attribute encrypted="true" name="Users.Password"                 password="true">8YxO3YSKDXJLmcsKeZhUSw == </Attribute>     <Attribute name="Users.Creation Date">2006-01-05 17:11:56.868</Attribute>     <Attribute name="Users.Lock User">0</Attribute>     <Attribute key="1" name="Users.Updated By Login">XELSYSADM</Attribute>     <Attribute name="Users.Password Reset Attempts Counter">0</Attribute>     <Attribute key="1" name="Organizations.Organization Name">Xellerate Users       </Attribute>     <Attribute name="Users.Login Attempts Counter">0</Attribute>     <Attribute key="1" name="Users.Created By Login">XELSYSADM</Attribute>   </UserInfo>- <GroupMembership>-   <Group key="3">      <Attribute name="Groups-Users.Creation Date">2006-01-05 17:12:30.299        </Attribute>       <Attribute name="Groups-Users.Update Date">2006-01-05 17:12:30.299         </Attribute>       <Attribute name="Groups-Users.Membership Status">Active</Attribute>       <Attribute key="1" name="Groups-Users.Updated By Login">XELSYSADM        </Attribute>       <Attribute name="Groups-Users.Membership Type">Direct</Attribute>       <Attribute key="3" name="Groups.Group Name">ALL USERS</Attribute>       <Attribute key="1" name="Groups-Users.Created By Login">XELSYSADM        </Attribute>     </Group>  </GroupMembership>- <PolicyProfile>-   <Policy key="1">      <Attribute name="UPD_ALLOW_LIST">Res2</Attribute>       <Attribute name="Access Policies.Key">1</Attribute>       <Attribute name="Access Policies.Name">AP2</Attribute>     </Policy>  </PolicyProfile>- <ResourceProfile>-   <ResourceInstance key="57">      <Attribute name="Users-Object Instance For User.Creation Date">2006-01-05                    17:12:36.599 </Attribute> 
      <Attribute key="45" name="Objects.Object Status.Status">Enabled</Attribute>       <Attribute key="1" name="Access Policies.Name">AP2</Attribute>       <Attribute key="6" name="Objects.Name">Res2</Attribute>       <Attribute name="Users-Object Instance For User.Provisioned By Method">                    Access Policy</Attribute>       <Attribute key="1"                    name="Users-Object Instance For User.Provisioned By Login">              XELSYSADM</Attribute>       <Attribute name="Users-Object Instance For User.Provisioned By ID">1        </Attribute>       <Attribute key="AP2" name="Access Policies.Key">1</Attribute> -     <ProcessData>-       <Parent key="8">-         <FormInfo>            <Attribute key="8" name="Structure Utility.Table Name">UD_RES2_PP               </Attribute>              <Attribute key="0" name="Structure Utility.Structure Utility Version                            Label.Version Label">Initial Version</Attribute>           </FormInfo>-         <Data key="54">            <Attribute name="UD_RES2_PP_B">bbbbbbbbbbbb</Attribute>             <Attribute name="UD_RES2_PP_A">aaaaaaaaaaaa</Attribute>             <Attribute key="1" name="Access Policies.Name">AP2</Attribute>           </Data>        </Parent>-       <Children>-         <Child key="9">-           <FormInfo>             <Attribute key="9" name="Structure Utility.Table Name">UD_RES2_CP                </Attribute>              <Attribute key="0" name="Structure Utility.Structure Utility Version                                  Label.Version Label">Initial Version</Attribute>             </FormInfo>-           <Data key="63">              <Attribute name="UD_RES2_CP_C">Entry1C</Attribute>               <Attribute name="UD_RES2_CP_D">Entry1D</Attribute>               <Attribute key="1" name="Access Policies.Name">AP2</Attribute>             </Data>          </Child>        </Children>      </ProcessData>    </ResourceInstance>-   <ResourceInstance key="74">      <Attribute name="Users-Object Instance For User.Creation Date">2006-01-05                     17:22:37.597</Attribute>       <Attribute key="33" name="Objects.Object Status.Status">Provisioning        </Attribute>       <Attribute key="5" name="Objects.Name">Res1</Attribute>       <Attribute name="Users-Object Instance For User.Provisioned By Method">                    Direct Provision</Attribute>       <Attribute key="1" name="Users-Object Instance For User.Provisioned By                    Login"> XELSYSADM</Attribute>       <Attribute name="Users-Object Instance For User.Provisioned By ID">                    XELSYSADM</Attribute>       </ResourceInstance>    </ResourceProfile>  </UserProfileSnapshot>

Snapshot Changes XML File

The snapshot changes XML describes all the changes that affect user attributes for a given transaction. All the attributes are related to the user profile. The top-most tag is Changes. Under this tag, we find all the changes made for a particular transaction. Each Change tag refers to a set of changes that affect the snapshot XML. The where attribute locates the position of the change and the Audit Engine makes the changes to the earlier snapshot XML by applying the changes.

The following extract is from an XML file containing snapshot changes:

  <?xml version="1.0" encoding="ISO-8859-1" ?> - <Changes>-   <Change action="insert" order="1"      where="/UserProfileSnapshot/ResourceProfile/ResourceInstance[@key='74']">-     <Attribute name="Users-Object Instance For User.Creation Date">        <OldValue />         <NewValue>2006-01-05 17:22:37.597</NewValue>       </Attribute>-     <Attribute name="Objects.Object Status.Status">        <OldValue key="" />         <NewValue key="35">Ready</NewValue>       </Attribute>-     <Attribute name="Objects.Name">        <OldValue key="" />         <NewValue key="5">Res1</NewValue>       </Attribute>-     <Attribute name="Users-Object Instance For User.Provisioned By Method">        <OldValue />         <NewValue>Direct Provision</NewValue>       </Attribute>-     <Attribute name="Users-Object Instance For User.Provisioned By Login">        <OldValue key="" />         <NewValue key="1">XELSYSADM</NewValue>       </Attribute>-     <Attribute name="Users-Object Instance For User.Provisioned By ID">        <OldValue />         <NewValue>XELSYSADM</NewValue>       </Attribute>     </Change>-   <Change action="update" order="2"      where="/UserProfileSnapshot/ResourceProfile/ResourceInstance[@key='74']">-     <Attribute name="Objects.Object Status.Status">        <OldValue key="35">Ready</OldValue>         <NewValue key="33">Provisioning</NewValue>       </Attribute>    </Change>  </Changes>

Information from the UPA table is normalized into UPA_USR, UPA_FIELDS, UPA_RESOURCE, and UPA_GRP_MEMBERSHIP for ease of querying for reporting purposes.

Storage of the User Profile Snapshot

Every time a snapshot of a user profile is taken, it is stored in a User Profile Audit, or UPA table. The structure of this table is as described in Table 2-1.

Table 2-1 Audit Table Structure

Field Value

Entry ID

Key for the audit record.

User Key

Key for the User whose user snapshot is recorded in this entry.

From Date

Date the snapshot entry became effective.

To Date

Date the snapshot entry was no longer effective. In the case of the entry representing the current User Profile, the To data is set to NULL.

Delta

The XML representation of changes only.

User Profile Snapshot

The XML representation of the User Profile snapshot.

Source

The source of the entry. The username of the user responsible of the change in addition to the API used.

Signature

This column is for customers to sign the Snapshot for non-repudiation.


Trigger for Taking A Snapshot

This section defines the events that trigger Oracle Identity Manager to take a user profile snapshot. As mentioned earlier, Oracle Identity Manager takes a new snapshot whenever any of the data elements that constitute the user profile snapshot change. Thus, the events that trigger the creation of a new snapshot are:

  • Modification to the user record (whatever the source: recon, direct, adapter, and so forth.)

  • Group membership change for the user

  • Changes in the policies that apply to the user

  • Provisioning of a resource to the user

  • De-provisioning of a resource for the user

  • Any provisioning related event for a provisioned resource:

    • Resource status change

    • Addition of provisioning tasks to the provisioning process

    • Updates to provisioning tasks in the provisioning process (status changes, escalations, and so on.)

    • Creation of or updates to Process Form data

Audit Engine

To prevent the volume of audit records to become a drain on the performance of the system, a conceptual Audit Engine performs complex data extraction, processing, and recording activity between every step of processing in Oracle Identity Manager, instead of the transactional processing. When the defined Event Triggers fire, they notify the audit engine to take a snapshot. The audit engine then performs the necessary processing offline to generate and record the audit snapshot.

This section includes the following topics:

Audit Levels

When you install the Audit and Compliance module, User Profile Audit is enabled by default and the auditing level is set to Resource From. After upgrading or changing the auditing level to a different value, you should run the GenerateSnapshot.sh script on Linux or the GenerateSnapshot.bat script on Windows. This script examines all users in the Oracle Identity Manager database and generates new snapshots based on the auditing level.


Note:

After changing the auditing level, be sure to run the GenerateSnapshot script before allowing users to access the system.

Tuning controls allow you to specify the level of detail of the auditing. These controls define the active triggers, and the working of the audit engine, and the data captured in the audit snapshot.

The audit levels are specified as a system configuration property in Oracle Identity Manager. The supported levels are:

  • Process Task: Audits the entire user profile snapshot together with the Resource Lifecycle Process.

  • Resource Form: Audits user record, group membership, resource provisioned, and any form data associated to the resource.

  • Resource: Audits the user record, group membership, and resource provisioning.

  • Membership: Only audits the user record and user group membership.

  • Core: Only audits the user record.

  • None: No audit is stored.


Note:

Audit level specifications are case-sensitive.

Using Post-Processors

The AUD table stores the audit metadata XML, which is used by the audit engine to create the snapshot and changes XML. Apart from a lot of other information, this metadata XML provides information on the table to store the snapshot and changes XML and post-processors. Post-processors are used to process data after the audit engine generates the snapshot and changes XML and stores it in the auditor table.

Types of Post-Processors

There are two types of post-processors, the internal auditor type and custom type. The internal auditor post-processors are defined in the auditor XML metadata. For instance, the User Profile Auditor has an internal post-processor that normalizes the XMLs into the reporting tables: UPA_USR, UPA_FIELDS, UPA_GRP_MEMBERSHIP, and UPA_RESOURCE. These tables are used by the reporting module to generate the appropriate reports.

Creating Custom Post-Processors

Custom post-processors are not included with the auditor itself. These are created by customers to extend the functionality or reporting of a given auditor. Custom post-processors are not defined in the XML metadata but in the lookup tables in Oracle Identity Manager.

To create custom post-processors, do the following:

  1. Create a new class that extends from the CustomAuditDataProcessor class and implements the processAuditData method.

  2. Create a new Lookup Definition in the Oracle Identity Manager Design Console as follows:

    1. Call the code Audit.AuditorName.CustomProcessors, where AuditorName is the name of the auditor that the post-processor will be using. For instance, in the case of User Profile audit, the auditor name would be UserProfileAuditor.

    2. Select the Lookup Type option.

    3. Enter the group name related to the auditor (in this case, the UPA Processors Group).

    4. Add the Lookup Code Information, which is the fully qualified classpath to the class you created. The code key and Decode should be the classpath. Type en for the Language and US for the Country settings.

  3. After the class is created and the lookup information is set up, place the class in a .jar file in the XL_HOME/JavaTasks directory.

Tables Used for Audits

User profile audit uses the following tables in the database:

The following tables are used for reporting using the Oracle Identity Manager reporting module:

Re-issue Audit Message Task

Oracle Identity Manager includes a scheduled task called Re-issue Audit Message Task that re-issues Audit JMS messages that were not processed because of database connectivity problems. All audit message data is stored in AUD_JMS and a corresponding JMS message with the AUD_JMS ID is sent. When the JMS message is picked up for processing, data from AUD_JMS is retrieved.

If any problems are found when the JMS message is picked up for processing, the JMS system will retry up to the configured number of retry times. If the message is not processed after retrying the configured number of retry times, it will end up in the Dead Letter Queue. Since the actual data is not in the JMS system, but is in another table, you can re-issue the message by sending the ID from AUD_JMS back to the JMS system using the Re-issue Audit Message Task.

Once the Re-issue Audit Message Task runs, there should not be any AUD_JMS entries. If there are any AUD_JMS entries, the message itself could be corrupted or the processor of the message cannot understand it. All messages concerning the same entity (in the case of User Profile, the entity is the user key) to be updated will reside in the AUD_JMS until they are resolved. Each of the audits for a single user are performed sequentially so that the audits are logged in order of when the event happened.

You should enable the Re-issue Audit Message Task and set it to run regularly. By default, the Re-issue Audit Message Task runs daily, but you should configure a specific start date and time. The date and time specified should preferably be around times when the system is not too busy. This allows for enough time to process messages, especially if there are too many of them to process.