Can this be accomplished with Oracles Fine Grained Auditing?
Get the client to call dbms_session.set_identifier('PHILTEST');. This will then be set in the CLIENT_ID audit field. Obviously you'l need to call it first from the client whenever a new connection is pulled from the pool.

For example:

PHIL@PHILL11G2 &gt; conn / as sysdba
Connected.
Loading glogin.sql

Session altered.

SYS@PHILL11G2 AS SYSDBA&gt; audit all by phil by access;

Audit succeeded.

SYS@PHILL11G2 AS SYSDBA&gt; AUDIT SELECT TABLE, UPDATE TABLE, INSERT TABLE, DELETE TABLE BY ACCESS;

Audit succeeded.

SYS@PHILL11G2 AS SYSDBA&gt; truncate table aud$;

Table truncated.

SYS@PHILL11G2 AS SYSDBA&gt; TRUNCATE TABLE fga_log$;

Table truncated.

SYS@PHILL11G2 AS SYSDBA&gt; conn phil/phil

PHIL@PHILL11G2 &gt; exec dbms_session.set_identifier('PHILTEST');

PL/SQL procedure successfully completed.

PHIL@PHILL11G2 &gt; select count(*) from fgatest;

  COUNT(*)
----------
     1

PHIL@PHILL11G2 &gt; conn / as sysdba

SYS@PHILL11G2 AS SYSDBA&gt; select CLIENT_ID from dba_audit_trail;

CLIENT_ID
----------------------------------------------------------------
PHILTEST
PHILTEST

2 rows selected.

SYS@PHILL11G2 AS SYSDBA&gt;