大家好,很久没来了.
遇到一个奇怪问题,现在也想不起具体的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,则不能通过! 虽然解决了问题,却不知道真正的原因,请高手解答
遇到一个奇怪问题,现在也想不起具体的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,则不能通过! 虽然解决了问题,却不知道真正的原因,请高手解答
解决方案 »
- oracle怎样查看当前用户下所有的序列
- 64位win7下 oracle 11gR2 plsql developer打开报错
- 两个服务器oracle中表格的insert into table select * from anothertable;
- 刚入门ORACLE,问个移动数据文件的问题
- ORA-01461: can bind a LONG value only for insert into a LONG column
- Oracle中function相关问题
- conn sys/sys@crt as sysdba
- 请教一个SQL语句,一个表的列数据怎么转换为字段名出来?
- oracle9i奇怪问题(bug?)
- 我购买了Oracle 9i的enterprise edition版,请问这是服务器版吗?另外Oracle 9i有哪几个版本?可以在winXP上安装吗?
- oracle中有没有函数可以解决这个问题?
- 各位大哥,小女有个问题,CONNECT BY...START WITH..请大家请教,有点急
是不是问题出在insert into TABLE0 (ky)这句?
UserA没有操作TABLE0 的权限!