我试图从任何模式捕获在表\u名称中触发[dml操作]的用户。当我编写下面的代码时,它捕获了错误的osuser。
代码
create ore replace trigger trigger_name
after insert on table_name
for each row
declare
v_username varchar2(20);
v_osuser varchar2(20);
begin
select distinct osuser, username into v_osuser, v_username from v$session where osuser in ( select sys_context('USERENV', 'os_user') from dual;
insert into audit_table values (v_osuser, v_username);
end;
/
如何修改此代码以便解决此问题?
注意:我在一台服务器上使用触发器,并从另一台服务器调用。有没有办法存储呼叫服务器的用户信息。当前,它正在从触发器定义的服务器返回用户信息。
谢谢您。
3条答案
按热度按时间au9on6nz1#
尝试使用以下代码:
e5njpo682#
使用
sys_context('userenv','CURRENT_SCHEMA')
以及sys_context('userenv','OS_USER')
获取架构名称/os用户。无需执行任何“select into”或声明任何局部变量可能值得在sys\u上下文中阅读文档
6yjfywim3#
当通过db链接执行操作时,“用户”是db链接中定义的用户,而不是调用db链接的用户。例如,数据库mydb
现在,当用户fred执行以下操作时:
然后,在数据库“yourdb”中,该操作由yourdb的用户scott执行,而不是由mydb的用户fred执行。