问题描述:运行存储过程A,该存储过程中调用创建表的存储过程B和创建视图的存储过程,运行出错,报没有足够权限
 问题解决:grant create table,create view to user; 为什么会这样?同一个用户下的过程和表,建表权限已经有了啊。

解决方案 »

  1.   

    还要增加以下权限
    grant create any table,create any view to user;
      

  2.   

    据估计原因:
    要确定“建表的存储过程B和创建视图的存储过程”中所有引用的表要显式的授于查询权限
    即:grant select on usera.table to userb
      

  3.   

    现在你所登录的用户应该当初是隐式地赋了权限(由其他相同权限的用户来创建这个用户),存储过程里动态SQL建表需要有create table权限,这就需要显示地赋权,像:grant create table,create view to user;
      

  4.   

    创建对象的系统权限都是要赋的,但一般通过给用户
    授予resource角色就行了,它包含创建各种基本对象的权限
    sql>grant connect,resource,unlimited tablespace to myuser;
      

  5.   

    上面的答复没有解释为什么已经有建表权限了,还要再执行grant create table to user?
    原来的建表权限是DBA用户执行grant connect,resource to user;
    请高手解释一下。给分哦。
      

  6.   

    SQL> select * from sys.role_sys_privs;ROLE                           PRIVILEGE                                ADM
    ------------------------------ ---------------------------------------- ---
    RESOURCE                       CREATE TRIGGER                           NO
    RESOURCE                       CREATE SEQUENCE                          NO
    RESOURCE                       CREATE TYPE                              NO
    RESOURCE                       CREATE PROCEDURE                         NO
    RESOURCE                       CREATE CLUSTER                           NO
    CONNECT                        CREATE SESSION                           NO
    RESOURCE                       CREATE OPERATOR                          NO
    RESOURCE                       CREATE INDEXTYPE                         NO
    RESOURCE                       CREATE TABLE                             NO已选择9行。
    权限有了。