作为系统用户,我遇到此错误:ORA-01031:权限不足
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作为系统用户,我遇到此错误:ORA-01031:权限不足相关的知识,希望对你有一定的参考价值。
我有一个用于删除分区的存储过程。开始之前,我必须删除一个约束。
我在系统用户上安装了存储过程。当我测试过程时,出现以下错误:'ORA-01031:权限不足'。
这是我写的一段代码:
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE USER_NAME.TABLE_NAME DISABLE CONSTRAINT CONSTRAINT_NAME';
EXCEPTION
WHEN OTHERS THEN
O_sCodError := 'NO_OK';
O_sDesError := 'Error at DISABLE CONSTRAINT_NAME: ' || SQLERRM || ';';
RETURN;
END;
嗯,当我以系统身份执行存储过程时,我不明白出现此错误的原因。而且我认为尝试删除分区时最终会想到相同的错误。
非常感谢您在这个问题上为我提供帮助。
答案
在11g XE上为我工作:
SQL> show user
USER is "SCOTT"
SQL>
SQL> create table test
2 (id number constraint pk_test primary key,
3 name varchar2(20)
4 );
Table created.
SQL> connect system
Enter password:
Connected.
SQL> begin
2 execute immediate 'alter table scott.test disable constraint pk_test';
3 return;
4 end;
5 /
PL/SQL procedure successfully completed.
SQL>
[请遵循该示例,然后在您的数据库中执行它。发布结果(通过编辑问题,而不是作为评论)。
另一答案
首先,永远不要在Oracle默认模式(如SYSTEM)中安装自定义代码。将您的代码放在专用的应用程序架构中。由于它包含动态SQL(立即执行),您可能要考虑使其成为“调用者的权利”过程,然后将其执行特权授予执行该过程的用户。
就是说,在Oracle 11g中,使用特权运行PL / SQL块的人必须对基础表具有直接权限,而不是通过DBA之类的角色继承的权限。如果该过程具有“定义者的权利”,那么拥有该过程的模式必须在表上具有直接特权。如果具有“调用者的权限”,那么执行该过程的用户必须具有特权。
请参阅此链接以获取更多详细信息:Execute immediate within Oracle Procedure
以上是关于作为系统用户,我遇到此错误:ORA-01031:权限不足的主要内容,如果未能解决你的问题,请参考以下文章