oracle中取消用户权限的问题revoke

jhbaiyang 2008-12-23 04:37:26
/*
创建存储过程
*/
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权限都是一样的?
...全文
4907 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhbaiyang 2008-12-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xingkongmori 的回复:]
创建存储过程的权限和创建表的权限不是同一个,存储过程里用到的命令语言,你要有相应的权限,有delete就要求你有delete权限,没有创建table就不要求你有create table的权限,当然你可以赋予用户grant execute any procedure to 用户名;
权限的分配是用到什么分配什么,不要多给。
[/Quote]

revoke create any procedure from system; 这个是取消用户创建存储过程权限的sql吗?
为什么都revoke了,创建过程还能执行成功?
jhbaiyang 2008-12-23
  • 打赏
  • 举报
回复
为什么我revoke delete any table和create any table 后
再用SQL> select * from session_privs;查看当前用户的权限
仍然能看到当前用户有delete any table和create any table 的权限???
是oracle的系统出错了吗??
快崩溃了
jhbaiyang 2008-12-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 linzi 的回复:]
revoke resource from system 再试试看还能不能建?
[/Quote]

revoke resource from system
*

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



xingkongmori 2008-12-23
  • 打赏
  • 举报
回复
创建存储过程的权限和创建表的权限不是同一个,存储过程里用到的命令语言,你要有相应的权限,有delete就要求你有delete权限,没有创建table就不要求你有create table的权限,当然你可以赋予用户grant execute any procedure to 用户名;
权限的分配是用到什么分配什么,不要多给。
linzi 2008-12-23
  • 打赏
  • 举报
回复
revoke resource from system 再试试看还能不能建?
jhbaiyang 2008-12-23
  • 打赏
  • 举报
回复
在线狂等!请指教!
xingkongmori 2008-12-23
  • 打赏
  • 举报
回复
关于create,你revoke的是create any table,跟存储过程的创建也无关,所以有没有你那句收回创建表的权限的语句都可以。
xingkongmori 2008-12-23
  • 打赏
  • 举报
回复
你的存储过程里有delete,你没有delete权限怎么可能创建成功
jhbaiyang 2008-12-23
  • 打赏
  • 举报
回复
。。。。。。boss让我明天给大家讲明白存储过程和用户授权、取消
能成牛顿那更好。。。(*^__^*) 嘻嘻……
jhbaiyang 2008-12-23
  • 打赏
  • 举报
回复
revoke create any table from system

revoke create any procedure from system
这两个执行后都一样,存储过程都能通过!
又是违规昵称 2008-12-23
  • 打赏
  • 举报
回复
楼主,凭着你的这股精神,迟早有一天会超越牛顿的
jhbaiyang 2008-12-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lpc19598188 的回复:]
你要的是delete的表的权限,
有没有create没有关系啊

存储过程要显示授权
[/Quote]

执行revoke select any table from system 后为什么创建存储过程还能执行通过?
jhbaiyang 2008-12-23
  • 打赏
  • 举报
回复
revoke select any table from system 后为什么创建存储过程还是能执行通过?
又是违规昵称 2008-12-23
  • 打赏
  • 举报
回复
你用的是这个吧?

" 这个时候再revoke create any table from system;执行后“创建存储过程”,通过,无误!"
jhbaiyang 2008-12-23
  • 打赏
  • 举报
回复
存储过程开头的create or replace procedure delete_systemlog_before 不是创建procedure 吗?
那为什么revoke create any procedure from system 后还是能创建存储过程?
又是违规昵称 2008-12-23
  • 打赏
  • 举报
回复
你要的是delete的表的权限,
有没有create没有关系啊

存储过程要显示授权

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧