2

数据库中有一个被授予 CREATE PROCEDURE 特权的用户。但是当该用户试图创建一个简单的过程时,会抛出以下错误: 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;

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

4

2 回答 2

9

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

作为一般规则,不应轻易授予此特权,因为它很容易被用来规避数据库安全性。

希望有帮助。

于 2012-05-05T12:11:44.143 回答
-1

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

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

这样,您就没有理由GRANT访问其他模式对象了。然后,TOTALBASE用户可以EXECUTE将该过程的特权授予当前用户。

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

Looking from another angle, this way it's also easier to maintain: TOTALUSER provides sort of an API in how it exposes data to the current user, hiding implementation details which can change in the future, being transparent to current user.

于 2012-05-05T17:01:30.650 回答