Oracle在使用代理用户时获取当前用户名

bweufnob  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(128)

当有问题的用户通过代理用户帐户连接时,是否可以在OracleDB中获取该用户的真实用户名?
真实用户名:i_am_the_true_user_name代理用户名:i_am_the_proxy_user_name
我尝试过的:
1.查询:从双用户中选择用户;
预期结果:i_am_the_true_user_name实际结果:i_am_the_proxy_user_name
1.查询:SELECT username FROM user_users;
预期结果:i_am_the_true_user_name实际结果:i_am_the_proxy_user_name

zynd9foi

zynd9foi1#

试试这个:

select sys_context('userenv','proxy_user') from dual;

字符串
代理帐户名(开发人员的个人帐户)在系统会话上下文中可用,并且可以通过数据库触发器自动在v$session视图中可见,以便DBA可以随时知道谁连接到共享帐户。* 注意:在实现此功能之前,请确保您没有将 * DBMS_SESSION.SET_IDENTIFIER * 功能用于任何其他用途。*

CREATE OR REPLACE TRIGGER db_session_trig 
AFTER LOGON ON DATABASE
  v_proxy_user varchar2;
BEGIN
  v_proxy_user := sys_context('userenv','proxy_user');
  if v_proxy_user is not null then
    dbms_session.set_identifier(v_proxy_user);
  end if;
END;

select username, osuser, client_identifier 
from v$session where username='I_AM_THE_TRUE_USER_NAME';

USERNAME                OSUSER    CLIENT_IDENTIFIER 
----------------------- --------- ----------------------
I_AM_THE_TRUE_USER_NAME oracle    I_AM_THE_PROXY_USER_NAME

相关问题