我有一个oracle包,其中包含一个创建表的过程,而不是授予它的权限。
代码与此类似:
Begin
Execute immediate 'create table SU.temp_tbl...';
...
...
Dbms_stats.gather_table_stats('SU', 'TEMP_TBL');
End;
该过程的所有者是具有DBA角色的用户。
此角色有
创建任何表格权限
如
分析任何表格权限
那么为什么当我运行这个过程时,我在gather table命令中得到了'no privileges'的例外, 但是“创造”刚刚执行了吗?
解决方案是什么?我是否需要SU用户向DBA授予明确的分析权限?
我正在使用oracle 11g版本。
感谢。
答案 0 :(得分:3)
特权必须直接授予过程/包的所有者,而不是间接授予角色。
当然EXECUTE ON owner.name_of_procedure
也是必要的。
来自GATHER_TABLE_STATS Procedure
的使用说明要调用此过程,您必须是表的所有者,或者您需要ANALYZE ANY权限。