小编anu*_*pks的帖子

有没有办法获取启动用户/架构的 sys_context('USERENV', 'CURRENT_USER')

如果我从 admin1 访问表 emp,则使用下面的函数,理想情况下它应该返回 0,这表示连接用户为“ADMIN”,但它返回 1(最终用户的连接使用 ADMINT_TEST1.emp)

即使选择audit_test1.emp(函数 check_user 在两种模式中都可用),我也希望获得 ADMIN1 用户的连接标识,例如:来自 admin1 用户

create or replace function check_user
return number
is
  n number;
begin
  SELECT sys_context('USERENV', 'CURRENT_USER') into usrname FROM dual;
  if (usrname ='AUDIT_TEST') then
    dbms_output.put_line('show user'||usrname);
    return 1;
  else 
    return 0;
  end if;
end ;
Run Code Online (Sandbox Code Playgroud)

测试功能(从用户运行:ADMIN1)

declare
  n number(1);
begin
  select audit_test.check_user into n from dual;
  dbms_output.put_line(n);
  select check_user into n from dual;
  dbms_output.put_line(n);
end;
/


Output
===============
show user   AUDIT_TEST
1
show user   ADMIN1
0
Run Code Online (Sandbox Code Playgroud)

这是预期的功能吗?即使发起用户是 ADMIN1,当我们发出 …

sql database oracle plsql oracle12c

0
推荐指数
1
解决办法
2027
查看次数

Oracle logoff触发器来获取会话执行的sql

我创建了一个包含所有可信源的主机名的表.如果连接的主机不在snif_session表中,我已经编写了一个oracle注销触发器来获取该会话执行的所有sql的详细信息.我将输出带到utl_file输出,其中包含sid,主机名,连接时间.

SQL> select * from snif_Session;

ALLOWED_HOST
--------------------------------------------------
RND1
WORKGROUP\RND1
Run Code Online (Sandbox Code Playgroud)

我被卡住的地方是用于获取该特定会话执行的所有sql的查询(我可以从v $ mystat获取sid).

这样做效果最好:

select a.sql_id
         ,b.sql_text 
from dba_hist_active_sess_history a
        ,dba_hist_sqltext b
where a.sql_id=b.sql_id 
Run Code Online (Sandbox Code Playgroud)

要么

select s.sid
         , s.serial#
         , a.sql_text
from v$session s
    join v$sqlarea a 
            on a.hash_value = s.sql_hash_value ;
Run Code Online (Sandbox Code Playgroud)

这是我写的代码(块),我将放在触发器中.

declare
    machine_id varchar2(50);
    val int;
    auth_terminal varchar2(50);
    check_machine varchar2(1000);
    mydate char(50);
    osuser_1 varchar2(50);
    sid_1 int;
    sql_query_1 varchar2(5000);
    machine_1 varchar2(50);
    trace_info UTL_FILE.FILE_TYPE;
begin
    select machine into check_machine 
    from v$session 
    where sid in (select distinct(sid) from v$mystat) ;
    select …
Run Code Online (Sandbox Code Playgroud)

security oracle audit triggers plsql

-1
推荐指数
1
解决办法
473
查看次数

标签 统计

oracle ×2

plsql ×2

audit ×1

database ×1

oracle12c ×1

security ×1

sql ×1

triggers ×1