数据库中有一个用户,授予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组中的任何人也无法创建过程。但我不确定。
答案 0 :(得分:7)
要在您自己以外的架构中创建过程,您需要'CREATE ANY PROCEDURE'特权。
作为一般规则,不应轻易授予此权限,因为它可以轻松用于规避数据库安全。
希望有所帮助。
答案 1 :(得分:-1)
在下面几条评论之后,我再试一次。
不要在另一个模式中创建过程;只让每个用户在自己的架构中创建对象。
这样,您GRANT
访问其他架构对象的理由就会减少。 TOTALBASE
用户可以将该过程的EXECUTE
权限授予当前用户。
当前用户需要来自TOTALUSER
表的一些数据,当他对函数或过程具有EXECUTE
权限时,不需要创建或访问其他对象。
从另一个角度来看,这种方式也更容易维护:TOTALUSER
提供了一种API,它如何向当前用户公开数据,隐藏将来可能发生变化的实施细节,对当前透明用户。