我尝试使用视图ALL_TAB_PRIVS
来确定某个特定用户的表是否存在某个授权。查询视图本身可以按预期工作,但是当我从包中的过程查询它时,它会错过一个被授予者。
这是我使用的代码段:
declare
procedure foo is
begin
for s in (select * from all_tab_privs p
where p.table_schema = 'B' and p.table_name = 'TABLE_NAME') loop
dbms_output.put_line(s.grantee);
end loop;
end;
begin
tester.foo;
dbms_output.put_line('--');
foo;
end;
我从架构A
运行此代码,并且我想检查架构C
是否在架构SELECT
中的表TABLE_NAME
上具有B
授权。 TESTER
是架构A
中的一个程序包,其程序foo
与程序代码段中的免费程序完全相同。但是输出是:
A
--
A
C
因此,打包的程序缺少C
的授权。这怎么可能?视图的构建方式会有所不同,具体取决于它的调用位置吗?我查看了文档,但无法找到解释原因的原因。