版本: Oracle 7.3.4
描述: 我所在项目组建了一个数据库,别人老是偷偷的改东西,每次都是制造一种假象,像是我改的(把别人的东西都改了,就是不改我的),制造了不少同事间的不愉快,为此我想写一个触发器,想看看,谁改了这张表,想把这个垃圾抓出来!但是好像有点难度,请大家帮帮忙。不管是记录IP也好,还是机器名成都可以。我没有办法在触发器中,确定是那个用户触发了他,请大家帮帮我!!!
注意:我的数据库是Oracle 7.3.4,所以说 SYS_CONTEXT 不支持!

解决方案 »

  1.   

    1、怎么捕获用户登录信息,如SID,IP地址等 
    http://www.itpub.net/296606.html
    2、如何查出连接数据库的客户端ip地址? 
    http://www.itpub.net/209559.html
      

  2.   

    如果只是更改数据的话,那就很简单了,这里就不说了,如果是修改了表结构的话,可以这样实现:
    for example:
    16:00:54 SQL> create table a(a int,b int);表已创建。已用时间:  00: 00: 00.40
    16:00:54 SQL> create table tp_log(machine varchar2(64),ip varchar2(30));表已创建。已用时间:  00: 00: 00.47
    16:00:54 SQL>
    16:00:54 SQL> create or replace trigger tes before alter on schema
    16:00:54   2  declare
    16:00:54   3  tp_machine varchar2(64);
    16:00:54   4  tp_ip varchar2(30);
    16:00:54   5  begin
    16:00:54   6    select machine into tp_machine from v$session where audsid=usere
    nv('sessionid');
    16:00:54   7    select SYS_CONTEXT('USERENV','IP_ADDRESS') into tp_ip from dual;16:00:54   8    insert into tp_log values (tp_machine,tp_ip);
    16:00:54   9  end;
    16:00:54  10  /触发器已创建已用时间:  00: 00: 00.78
    16:00:55 SQL> alter table a modify b number(3);表已更改。已用时间:  00: 00: 00.22
    16:01:09 SQL> select * from tp_log;MACHINE                                                          IP
    ---------------------------------------------------------------- ---------------ITB\ZH                                                    10.196.132.56已用时间:  00: 00: 00.31这样就可以把修改表的机器名和ip记录下来,需要其它信息可以相应的添加
      

  3.   

    to 隐者(龙祖宗):
    注意:我的数据库是Oracle 7.3.4,所以说 SYS_CONTEXT 不支持!to 大家:
    因为Oracle的版本太低,所以才来这里问,不然网上满天飞的资料太多了
      

  4.   

    请问一下我在触发器中一写 v$session 这样类似的表时,总是显示“标识符sys.v_$session必须被说明” ,这是为什么呢?