我创建了以下触发器,但是我需要获取已登录到应用程序的用户名和dml操作,而不是当前登录到数据库中的用户
CREATE OR REPLACE TRIGGER orders_after_delete
AFTER update or delete
ON orders
FOR EACH ROW
DECLARE
v_username varchar2(10);
BEGIN
SELECT user INTO v_username
FROM dual;
INSERT INTO orders_audit
VALUES
( :old.order_id,
:old.quantity,
:old.cost_per_item,
:old.total_cost,
sysdate,
v_username,
:new.total_cost );
END;
有了这个任务,我得到了登录数据库的用户的用户名。我想让用户登录我的用户应用程序。
答案 0 :(得分:1)
要审核用户,请使用正确的Oracle审核功能:
https://docs.oracle.com/cd/E11882_01/server.112/e10575/tdpsg_auditing.htm#TDPSG50000
比触发器好多了。
答案 1 :(得分:0)
在INSERT
语句之前,使用IF-ELSE
构造检查用户名。区分application user
和schema owner
的一种方法是验证授予用户的roles
。
您可以从username
查询process
,program
,v$session
,以检查用户是否通过应用程序登录。