0

我有一个带有创建表的过程的 oracle 包,而不是它授予权限。

代码与此类似:

Begin
Execute immediate 'create table SU.temp_tbl...';
...
...
Dbms_stats.gather_table_stats('SU', 'TEMP_TBL');
End;

该过程的所有者是具有 DBA 角色的用户。

这个角色有

创建任何表权限

分析任何表权限

那么为什么当我运行这个过程时,我在收集表命令上得到一个“无特权”异常,但“创建”刚刚执行好?

解决方案是什么?我是否需要 SU 用户向 DBA 授予显式分析权限?

我正在使用 oracle 11g 版本。

谢谢。

4

1 回答 1

3

特权必须直接授予过程/包的所有者,而不是由角色间接授予。

当然EXECUTE ON owner.name_of_procedure也需要。

来自GATHER_TABLE_STATS 过程的使用说明

要调用此过程,您必须是表的所有者,或者您需要 ANALYZE ANY 特权。

于 2017-08-06T16:09:45.640 回答