create or replace function sys.get_session_info
(sess_id in number
, info_type in varchar2) return varchar2
is
w_osuser varchar2(100);
w_machine varchar2(100);
w_user varchar2(100);
begin
Select osuser, machine, user into
w_osuser, w_machine, w_user
from v$session
where audsid = sess_id;
if upper(info_type) = 'OSUSER' then
return w_osuser;
elsif upper(info_type) = 'MACHINE' then
return w_machine;
elsif upper(info_type) = 'USER' then
return w_user;
end if;
end;
/* Above function accesses session information */
/
function created.
grant execute on get_session_info to public;
Grant succeeded.
create public synonym get_session_info for sys.get_session_info;
Synonym created.
Then connected as some other user:
SQL> col osuser format a20
SQL> col machine like osuser
SQL> col usr heading "Oracle|User" format a20
SQL> select get_session_info(userenv('sessionid'),'OSUSER') OSUSER
2 , get_session_info(userenv('sessionid'),'MACHINE') machine
3 , get_session_info(userenv('sessionid'),'USER') usr
4 from dual
5 /
Oracle
OSUSER MACHINE User
-------------------- -------------------- --------------------
dhunt TFMOBILE2709 TEST
1 row selected.