请教各位大侠,请问能不能或怎么查询Oracle数据中在执行update 表的操作系统用户名。如自动记录每天哪些操作系统用户对某张表进行了UPDATE操作。

解决方案 »

  1.   

    用触发器
    从V$session可以查询很多你关心的信息select username from v_$session where audsid = userenv( 'sessionid' ) ;
    select sys_context('userenv','ip_address') from dual;
    select sys_context('userenv','os_user') from dual;
    --这个就是客户端操作系统的用户名
    select machine from v_$session where audsid = userenv( 'sessionid' ) ;
    select terminal from v_$session where audsid = userenv( 'sessionid' ) ;
    select program from v_$session where audsid = userenv( 'sessionid' ) ;
      

  2.   

    bjshannon(山农),您好,谢谢您的指教
    现在我碰到一个新的问题我们这个系统是员工通过NetTerm 连到系统(unix)中操作的,登录的用户名为rxh009(该用户的.profile中内容如下:
    /data/gsmmis/xw/g_logusr.com
    exit 0
    使得员工一登陆就进入“计费系统”的登陆界面,用户名即为rxh009,另要求输入“计费系统”密码),进入“计费系统”操作时,查询oracle数据库v$session osuser其实rba001,但在操作系统中执行
    finger rxh009
    得到的terminal =ttyq4和 v$session 显示的一样,导致按您的方法去记录osuser就没什么意义了bjshannon(山农),请问这种情况下,又怎么去取得更多的信息,找到osuser为rxh009,而不是rba001,谢谢!!!
      

  3.   

    你用sqlplus连接,然后执行
    SQL> !whoami返回的就是操作系统用户名,应该跟v$session中记录的一致