我想记录一个关与哪些人查询这个表的记录的日志怎么做

解决方案 »

  1.   

    可以使用触发器呀!
    对数据库中的DDL,DML事件进行监控……
    这是我写的,对数据库中DDL事件进行监控的触发器,
    仅供参考:create table sys.ddl_actions
    (who varchar2(100),
    what varchar2(2000),
    when date,
    ip_address varchar2(100),
    terminal varchar2(100)
    );
    /-------------------------------------------------------------------
    CREATE OR REPLACE TRIGGER sys.LogDDLActions
    BEFORE DDL ON DATABASE
    DECLARE
       executor     ddl_actions.who%TYPE;
       action       ddl_actions.what%TYPE;
       ipaddr       ddl_actions.ip_address%TYPE;
       tterminal    ddl_actions.terminal%TYPE;
       
    BEGIN
       executor := LOGIN_USER;
       action   := SYSEVENT||' '||DICTIONARY_OBJ_TYPE||' '
          ||DICTIONARY_OBJ_OWNER||'.'||DICTIONARY_OBJ_NAME;
          
       SELECT DISTINCT TRIM(SYS_CONTEXT('userenv','ip_address')), terminal INTO ipaddr, tterminal
         FROM V_$SESSION 
        WHERE NVL(USERNAME,'NULL') = USER 
          AND TERMINAL = USERENV('TERMINAL'); 
      
       INSERT INTO ddl_actions VALUES (executor, action, SYSDATE, ipaddr, tterminal);
       
       EXCEPTION
                WHEN OTHERS THEN
                INSERT INTO ddl_actions VALUES (executor, action, SYSDATE, null, null);  
    END;
    /个人建议:最好不要使用基于数据库级别DML触发器,这样会给数据库的性能带来很大的影响!