有A和B两个用户,在A用户下有两张表结构相同的表A1和A2,我用用户B建立一个触发器监视A1表,并把操作同步到A2表。
这时我在A2表建立多一个触发器查看是以什么帐号同步,发现用的是A帐号而不是我想要的用B帐号操作A2表。帐号B有操作A2表的权限。
这是什么原因?
或者有什么办法可以完成我想要的功能:帐号B建立的触发器可以以帐号B来操作帐号A的A2表而不是以A帐号。

解决方案 »

  1.   

    GRANT ALTER 
        ON  "A"."TABLE" TO "B"
    GRANT DELETE ON  "A"."TABLE" TO "B"
    GRANT INDEX ON  "A"."TABLE" TO "B"
    GRANT INSERT ON  "A"."TABLE" TO "B"
    GRANT REFERENCES ON  "A"."TABLE" TO "B"
    GRANT SELECT ON  ON  "A"."TABLE" TO "B"
    GRANT UPDATE ON  ON  "A"."TABLE" TO "B"
      

  2.   

    简单来说就是我B用户建立的触发器触发时用的是A帐号去更新A2表,但我想用的是B这个用户去更新A2。
      

  3.   

    发现用的是A帐号而不是我想要的用B帐号操作A2表
    你怎么知道是A账户?通过什么属性来获取的?
    select s.USERNAME, s.OSUSER
      from v$sql q, v$sql_cursor c, v$session s
     where s.audsid = (select userenv('SESSIONID') from dual)
       and s.prev_sql_addr = q.address
       AND c.STATUS = 'CURFETCH'
    你用这个查询username呢?
      

  4.   

    我在A2表上建立触发器记录操作的USER和进行什么操作,记录在一张日志表中。所以才看出来是A帐户
      

  5.   

    我就是问你 操作的USER 是怎么取的?
      

  6.   

    在触发器中,我用inser语句,在值那直接用user就可以获取啊,log_table为我自己建立的日志表
    触发器我是这样写的
    if updating then
      insert into log_table(username,Operater,Status,Status_Seq) values(user,'update',:new.status,:new.status_seq);
    end if;
      

  7.   

    我试过在PL/SQL里用B帐号执行更新语句,我A2表的触发器就会记录到log_table(我的日志表)操作的用户是B,但我在B帐号下建立的触发器BTRIGGER,触发时操作A2表则记录到日志表的信息显示的是用A帐号操作的
      

  8.   

    真的是搞不懂ORACLE的触发器的机制,明明用的是B用户的触发器去操作A用户的表,为什么会变成A用户来完成操作
      

  9.   

    不用DBLINK,在同一个数据库里面。
      

  10.   

    自己解决了原来跟调用者权限有关,因触发器建立在A用户的A1表上,所以触发器就会动态的使用A来操作A2表,要想用B用户来操作A2表的话,只能够将触发器建立在B用户的表上了。
      

  11.   

    CREATE OR REPLACE TRIGGER B_PSNDEPLIST_TRIGGER
    BEFORE INSERT
    ON HFMPLY.B_PSNDEPLIST
    REFERENCING OLD AS OLD NEW AS NEW
    FOR EACH ROW
    declare
      accNum number(6);
    begin
      select count(*) into accNum from b_psnDepList
             where (state<>'0')
                   and(accNo=:new.accNo)
                   and((depType in ('01','02','03','04'))
    or((depType='99')and(depYear=:new.depYear)));
      if (accNum <> 0) then
        rollback;
      end if;
    end b_psnDepList_trigger;  比如触发器是建在hfmply用户的,要是在另一个用户下执行的话,要是也是这个触发器的话,也是操作的hfmply的表 
      

  12.   

    需要在A用户执行授权 grant insert on 被插入表 to B
    触发器的插入和单独insert语句权限不一样