日期:2014-05-17  浏览次数:20922 次

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

------解决方案--------------------
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"

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

还是不清楚。。。。。。
------解决方案--------------------
创建Database Link吧