环境:ORACLE10G ,XP
报错:过程里执行EXECUTE IMMEDIATE V_SQL;提示权限不足
尝试操作:1登陆dba用户,对用户进行授权:conn /as sysdba-->grant sysdba to user1
          2然后重启数据库,CMD中 oradim -shutdown sid 库sid-->oradim -startup sid 库sid
          3重新登陆user1用户,执行刚才的过程,还是报错:ORA-01031: 权限不足
                                                        ORA-06512: 在 "ULTRANMS.P_TEST", line 18
                                                        ORA-06512: 在 line 2
          4查看DBA权限表:select * from v$pwfile_users-->user1 SYSDBA:TRUE  SYSOPER:FALSE
备:V_SQL是建立视图的语句。请问兄弟们哪里出问题了。指点下
                         

解决方案 »

  1.   

    按理说sysdba权限已经有了啊,是不是其他地方报的的错啊
      

  2.   

    grant dba to user1不要sysdba
      

  3.   

    是否是以 conn user1 as sysdba 形式登陆的?
    登陆后使用 show user 命令检查一下当前的用户是否为 sys。
      

  4.   

    我记得是dba权限 楼主再试试
      

  5.   

    登陆的是sys,
    grant dba to user1也尝试了。同样的报错权限不足。
      

  6.   

    抱着试试看的想法 
    grant create any view to user1。
    然后再执行过程,竟然成功了。凌乱了
      

  7.   


    对于过程里面含有动态建表  在调用的时候 权限失效在建立的时候
    create or replace procedure P_TEST 
    authit current_useras
    ....
      

  8.   

    总结:查了点资料发现,ORACLE中的role权限(比如dba),在存储过程中并不能生效。
    解决这种问题一般需要根据报错,显示的授权(如grant create any view to user1)但这种方法挺费劲,有时候得授权好多次曾能执行存储过程。ORACLE给出了一种解决办法,使能在存储过程中使用role权限,那就是定义过程的时候添加 Authid Current_User(如create or replace procedure P_TEST  
    authid current_user as...)
       这里边引申出来对象两种执行权限:定义者权限和调用者权限。默认都是定义者权限,声明Authid Current_User后就是调用者权限,拿调用者权限来执行对象。
       
      

  9.   

    本该结贴了,其实还是有疑问的:我定义和调用都是统一用户。
    为什么需要手动授权,或者声明过程为Authid Current_User调用者权限。
    难道问题的核心不是定义者和调用者权限问题。而是ORACLE的Role权为限就是会在过程里失效?
    但是失效的原因是什么,定义者权限和调用者权限?而我的定义者和调用者是同一个用户,又绕回来了。
    又凌乱了,牛牛们能不能再指点下。
      

  10.   

    是不是execute immediate V_SQL里面V_SQL的问题呀?记得我也是DBA,在执行execute immediate V_SQL的时候也提示过权限不足,然后看我的V_SQL,里面的内容是'create table1 as select * from table2',后来老员工说我没有权限做这个事,不能建表,后来他帮我grant了一下权限,再执行就通过了
      

  11.   

    对头,role在过程中不可见。过程中对用户对象的操作必须显示授权。我曾经也遇到这样的问题。