/*
创建存储过程
*/
create or replace procedure delete_systemlog_before
(
v_before in number
)
is
begin
delete from KONG.systemlog where KONG.systemlog.datetime < current_timestamp - NUMTODSINTERVAL ( v_before , 'MONTH' );
commit;
end delete_systemlog_before;用system用户登录,执行后提示用户权限不足错误!
当grant create any table to system;执行后,再执行上面的“创建存储过程”提示一样的错误;
继续输入grant delete any table to system;后执行“创建存储过程”通过,无误!
这个时候再revoke create any table from system;执行后“创建存储过程”,通过,无误!
这个时候问题就就出现了:为什么system用户没有delete权限的时候“创建存储过程”执行不能通过,而有没有create权限都是一样的?

解决方案 »

  1.   

    你要的是delete的表的权限,
    有没有create没有关系啊存储过程要显示授权
      

  2.   

    存储过程开头的create or replace procedure delete_systemlog_before  不是创建procedure 吗?
    那为什么revoke create any procedure from system 后还是能创建存储过程?
      

  3.   

    你用的是这个吧?" 这个时候再revoke create any table from system;执行后“创建存储过程”,通过,无误!" 
      

  4.   

    revoke select any table from system 后为什么创建存储过程还是能执行通过?
      

  5.   


    执行revoke select any table from system 后为什么创建存储过程还能执行通过?
      

  6.   

    revoke create any table from system 

    revoke create any procedure from system 
    这两个执行后都一样,存储过程都能通过!
      

  7.   

    boss让我明天给大家讲明白存储过程和用户授权、取消
    能成牛顿那更好(*^__^*) 嘻嘻……
      

  8.   

    你的存储过程里有delete,你没有delete权限怎么可能创建成功
      

  9.   

    关于create,你revoke的是create any table,跟存储过程的创建也无关,所以有没有你那句收回创建表的权限的语句都可以。
      

  10.   

    revoke resource from system 再试试看还能不能建?
      

  11.   

    创建存储过程的权限和创建表的权限不是同一个,存储过程里用到的命令语言,你要有相应的权限,有delete就要求你有delete权限,没有创建table就不要求你有create table的权限,当然你可以赋予用户grant execute any procedure to 用户名;
    权限的分配是用到什么分配什么,不要多给。
      

  12.   


    revoke resource from system
    *第 1 行出现错误: 
    ORA-01951: ROLE 'RESOURCE' 未授予 'SYSTEM' 
    和那个应该没关系
      
      

  13.   

    为什么我revoke delete any table和create any table 后
    再用SQL> select * from session_privs;查看当前用户的权限 
    仍然能看到当前用户有delete any table和create any table 的权限???
    是oracle的系统出错了吗??
    快崩溃了
      

  14.   


    revoke create any procedure from system; 这个是取消用户创建存储过程权限的sql吗?
    为什么都revoke了,创建过程还能执行成功?