You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle使用代理用户连接时,如何获取真实用户名?

在Oracle DB中获取代理连接的真实用户名

当通过代理用户账户连接时,你之前使用的SELECT user FROM dual和SELECT username FROM user_users返回的都是当前上下文的代理用户,要获取真实用户名可以用以下两种方法:

方法1:查询V$SESSION视图

通过会话ID过滤当前会话,直接获取真实用户名和代理用户名:

SELECT username AS 真实用户名, proxy_username AS 代理用户名
FROM v$session
WHERE sid = SYS_CONTEXT('USERENV', 'SID');

此查询中,username字段对应真实用户名i_am_the_true_user_name,proxy_username对应代理用户名i_am_the_proxy_user_name。

方法2:使用SYS_CONTEXT函数

利用Oracle的环境上下文函数区分会话用户与当前用户:

SELECT 
  SYS_CONTEXT('USERENV', 'SESSION_USER') AS 真实用户名,
  SYS_CONTEXT('USERENV', 'CURRENT_USER') AS 代理用户名
FROM dual;
  • SESSION_USER:返回创建当前会话的真实用户(即你需要的i_am_the_true_user_name)
  • CURRENT_USER:返回当前上下文的用户(代理用户i_am_the_proxy_user_name)

补充说明

你之前的查询返回代理用户名是因为:

  • user关键字等价于CURRENT_USER,代表当前执行上下文的用户
  • user_users视图展示的是当前用户的自身信息,因此返回代理用户的名称

内容的提问来源于stack exchange,提问作者Kevin White

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:47:35