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