ORACLE - 创建已创建的过程,但无法创建过程

时间:2012-05-05 11:09:38

标签: oracle stored-procedures privileges ora-01031

数据库中有一个用户,授予CREATE PROCEDURE privelege。但是当该用户尝试创建一个简单的过程时,将引发以下错误:ORA-01031:权限不足 01031. 00000 - “权限不足” *原因:尝试更改当前用户名或密码            没有适当的特权。如果,也会发生此错误            尝试在没有必要操作的情况下安装数据库            系统权限。

这是程序的DDL:

 CREATE OR REPLACE PROCEDURE TOTALBASE.ROUNDUP 
          (CUR OUT SYS_REFCURSOR  ) 
 AS 
 BEGIN
  OPEN CUR FOR
   SELECT * FROM TOTALBASE.ABONENT; 
 END ROUNDUP;

我还应该考虑做些什么来完成这项工作?我怀疑,即使授予了privelege不在管理员或ORA_DBA组中的任何人也无法创建过程。但我不确定。

2 个答案:

答案 0 :(得分:7)

要在您自己以外的架构中创建过程,您需要'CREATE ANY PROCEDURE'特权。

作为一般规则,不应轻易授予此权限,因为它可以轻松用于规避数据库安全。

希望有所帮助。

答案 1 :(得分:-1)

在下面几条评论之后,我再试一次。

不要在另一个模式中创建过程;只让每个用户在自己的架构中创建对象。

这样,您GRANT访问其他架构对象的理由就会减少。 TOTALBASE用户可以将该过程的EXECUTE权限授予当前用户。

当前用户需要来自TOTALUSER表的一些数据,当他对函数或过程具有EXECUTE权限时,不需要创建或访问其他对象。

从另一个角度来看,这种方式也更容易维护:TOTALUSER提供了一种API,它如何向当前用户公开数据,隐藏将来可能发生变化的实施细节,对当前透明用户。