2011-12-15 30 views
0

我們目前有一個登錄名爲trigger的登錄用戶信息,用於從特定應用程序(即SQL Plus,SQL Developer)登錄Oracle的會話。它採用這些信息並將其插入表中以用於審計目的。登錄觸發器,用於接受用戶輸入

現在,如果用戶通過其中一個應用程序登錄我們正在陷入困境,我們希望提示用戶輸入可登錄的信息,然後將其寫入同一張表中以用於審計目的。

關於我們如何用我們擁有的東西或者其他關於如何完成這件事情的想法來做到這一點的想法?

當前Login Trigger

begin 
    if (dba_monitor.get_program_name = 1) 
    then 
     insert into dba_monitor.logon_table2 
     (username,machine,program, logon_date) 
     select username,machine,program,sysdate 
     from v$session 
     where username=(select user from dual) 
     and username not in ('SYSMAN','DBSNMP'); 
    else 
     insert into dba_monitor.logon_table 
     (user_name,logon_date) 
     select username,sysdate 
     from v$session 
     where username=(select user from dual) 
     and username not in ('SYSMAN','DBSNMP'); 
    end if; 
end; 

DBA_MONITOR.GET_PROGRAM功能:

return varchar2 
is 
    audit_program number :=0; 
    audit_select number :=0; 
begin 
    select 1 
    into audit_program 
    from v$session 
    where audsid = sys_context('USERENV','sessionid') 
     and (upper(program) in ('SQLPLUS.EXE', 'SQLPLUSW.EXE', 'TOAD.EXE', 'GOLDEN32.EXE', 'MSACCESS.EXE')); 
    return(audit_program); 
exception 
    WHEN NO_DATA_FOUND 
    then 
     return(audit_select); 
end; 

回答

4

不可能的 - 觸發器不能把用戶輸入。

您最好擁有一個始終處於鎖定狀態的破碎玻璃用戶帳戶,並讓用戶在檢查破碎玻璃用戶帳戶時輸入他們的理由。

哦,你的應用程序列表是安全的,將os應用程序名稱從sqlplus.exe更改爲fluffybunnies.exe很簡單。