【发布时间】:2020-06-09 12:53:59
【问题描述】:
我试图从任何模式中捕获在 table_name 中触发 [dml-operation] 的用户。在我编写以下代码时尝试这样做时,它捕获了错误的 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;
/
如何修改此代码以便解决/解决此问题?
注意: 我在一台服务器中使用触发器,并从另一台服务器调用。有什么方法可以存储调用服务器的用户信息。目前,它正在从触发器定义的服务器返回用户信息。
谢谢。
【问题讨论】:
-
你应该做的。它捕获了什么,您希望它捕获什么?它是否有错误的操作系统用户、数据库用户或两者都有?如果您使用
dbms_output进行调试,您会看到什么不同吗? - 远射,但审计表上可能有触发器。你是从哪里插入的? -
你好@Alex Poole,谢谢你的回复,但是,我认为这不起作用,因为我在一个服务器中使用触发器,并从另一台服务器调用。有什么方法可以存储调用服务器的用户信息。目前,它正在从触发器定义的服务器返回用户信息。
-
这是您应该在问题中包含的相当重要的信息。您是指通过数据库链接吗?
-
@Feullie'Tombee'-ksub:请编辑您的问题并详细说明所有涉及的服务器(数据库服务器、应用程序服务器、机器......)以及您想要检索的
os_user。 -
是的,亚历克斯·普尔。我无法从开发服务器环境中捕获用户信息,谁在另一台服务器的表中执行 dml 操作(可以是生产环境)。
标签: sql oracle plsql triggers database-trigger