有A和B两个用户,在A用户下有两张表结构相同的表A1和A2,我用用户B建立一个触发器监视A1表,并把操作同步到A2表。
这时我在A2表建立多一个触发器查看是以什么帐号同步,发现用的是A帐号而不是我想要的用B帐号操作A2表。帐号B有操作A2表的权限。
这是什么原因?
或者有什么办法可以完成我想要的功能:帐号B建立的触发器可以以帐号B来操作帐号A的A2表而不是以A帐号。
这时我在A2表建立多一个触发器查看是以什么帐号同步,发现用的是A帐号而不是我想要的用B帐号操作A2表。帐号B有操作A2表的权限。
这是什么原因?
或者有什么办法可以完成我想要的功能:帐号B建立的触发器可以以帐号B来操作帐号A的A2表而不是以A帐号。
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账户?通过什么属性来获取的?
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呢?
触发器我是这样写的
if updating then
insert into log_table(username,Operater,Status,Status_Seq) values(user,'update',:new.status,:new.status_seq);
end if;
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的表
触发器的插入和单独insert语句权限不一样