数据库当前用户授予了connect、resource权限,在存储过程里面执行execute immediate 'create table XX'时会报“权限不足”的错误。此时觉得很奇怪,resource角色是具有create table的权限的,为什么在存储过程里面创建表就权限不足了。
查了资料,原因为:用户拥有的角色role在存储过程里面不可用。 一般有如下两种解决方法:
1.显示的给当前用户授权:grant create table to user;
但是如果存储过程里面如果需要用到其他的权限,那也要显示授予,这种方式就比较麻烦了。
2.创建存错过程的时候加上 authid current_user,如:create or replace procedure xx authid current_user is;
如此,存储过程中就可以用到当前用户具有的角色的权限了。相对于第一种方式来说,这种方法比较方便易用。