高手请进--权限问题

zpffpz 2005-01-28 11:04:51
在ps/sql developer(或sql/plus)上用system/manager连接
1、创建了表空间:
CREATE TABLESPACE EmsNetOn DATAFILE '/usr/u02/EmsNet.DBF' SIZE 10M AUTOEXTEND ON NEXT 1M MAXSIZE 30M DEFAULT STORAGE (INITIAL 64K NEXT 32K PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS UNLIMITED)/
提示创建成功。
2、创建存储过程:
create or replace procedure sp_iccpdel
as nums number;
begin
select count(1) into nums from user_tablespaces where tablespace_name = 'EMSNETON';
if nums > 0 then
execute immediate 'drop tablespace EMSNETON including contents and datafiles';
end if;
end;
提示编译和创建成功。
3、执行存储过程sp_iccpdel出错:
提示没有权限,位置:execute immediate 'drop tablespace EMSNETON including contents and datafiles';

4、单独执行一条sql语句:drop tablespace EMSNETON including contents and datafiles;
提示drop成功。

请问:1、在同一个用户会话的情况,为什么执行存储过程没有权限?而单独执行又有权限?
2、给system赋予drop tablespace(即执行sql语句:grant drop tablespace to system)后,
执行存储过程sp_iccpdel成功,为什么一定还要给system赋予drop tablespace权限,不是
赋予权限之前单独执行一条drop语句没问题吗?
...全文
72 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
luxuezhu 2005-01-28
  • 打赏
  • 举报
回复
好像你的存储过程的所有者问题
[Q]怎么设置存储过程的调用者权限
[A]普通存储过程都是所有者权限,如果想设置调用者权限,请参考如下语句
create or replace
procedure ……()
AUTHID CURRENT_USER
As
begin
……
end;

ORARichard 2005-01-28
  • 打赏
  • 举报
回复
试试这样写行不行

create or replace procedure sp_iccpdel authid current_user
as nums number;
...
luxuezhu 2005-01-28
  • 打赏
  • 举报
回复
sorry,没有看完题就写上去了.
luxuezhu 2005-01-28
  • 打赏
  • 举报
回复
SQL> conn sys/sys@pgjt as sysdba
已连接。
SQL> grant drop tablespace to scott;

授权成功。

17,134

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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