大家好,很久没来了.
   遇到一个奇怪问题,现在也想不起具体的Oracle表权限控制的逻辑了.
   问题如下:环境:Oracle10
     建立了两个用户, UserA/UserB
     都具有DBA权限
问题: 
     1. UserA中建立了一个Oracle Function
        create or replace function f_test(goodsid char) 
        return number is  
        rtn number;
        begin
            insert into TABLE0 (ky)
            select chk.goodsid
            from TABLE1 chk, UserB.TABLE2 good 
            where chk.goodsid = good.goodsid;
            return 0;
       end;
       编译时候报错:表或View不存在.
     2.检查UserA,果然没有UserB.TABLE2的select 权限(查数据字典)
     3.Conn UserB, Grant Select on TABLE2 to UserA ,再编译UserA的f_test,成功
     4.问题似乎解决得很顺利,但是奇怪的是, 虽然在step1的时候 ,f_test不能编译,但是
            select chk.goodsid
            from TABLE1 chk, UserB.TABLE2 good 
            where chk.goodsid = good.goodsid;
       这个语句是可以在UserA中顺利执行的,也就是说虽然UserB没有grant select on TABLE2给UserA, UserA还是可以检索这个表!但是这个语句如果写在一个PL/SQL function,则不能通过!     虽然解决了问题,却不知道真正的原因,请高手解答