Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 权限不足错误_Sql_Oracle - Fatal编程技术网

Sql 权限不足错误

Sql 权限不足错误,sql,oracle,Sql,Oracle,我一直在某个模式上执行各种pl/sql过程,它们都执行得很好。但是在执行一个特定的过程时,我得到的错误如下 SQL> execute call_para_cursor BEGIN call_para_cursor; END; * ERROR at line 1: ORA-01031: insufficient privileges ORA-06512: at "SYSTEM.CALL_PARA_CURSOR", line 4 ORA-06512: at line 1 虽然我在同一个模式

我一直在某个模式上执行各种pl/sql过程,它们都执行得很好。但是在执行一个特定的过程时,我得到的错误如下

SQL> execute call_para_cursor
BEGIN call_para_cursor; END;

*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "SYSTEM.CALL_PARA_CURSOR", line 4
ORA-06512: at line 1
虽然我在同一个模式上执行该过程,但它要求我获得更多特权。 我该如何摆脱这种局面

create or replace procedure call_para_cursor as

BEGIN
 execute immediate ' create or replace procedure para_cursor_test as
cursor c_p_det(tar_val number) is select name, salary from fees where salary    < tar_val;
nname varchar2(30);
ssalary number(5);
BEGIN
Open c_p_det(1000);
LOOP
FETCH c_p_det into nname, ssalary;
DBMS_OUTPUT.PUT_LINE(NNAME || SSALARY);
EXIT WHEN C_P_DET%NOTFOUND;
END LOOP;
CLOSE C_P_DET;
END';

dbms_output.put_line('done processing !!');
END;
根据需要创建或替换过程调用
开始
执行立即“创建或替换程序”段落光标测试,如下所示
光标c_p_det(tar_val number)是选择名称,其中salary
在处理函数和过程时,您可以授予用户执行这些函数和过程的能力

GRANT EXECUTE ON object TO user;
对象:为其授予权限的数据库对象的名称


用户:将被授予执行权限的用户的名称。

问题是以下几方面的组合:

  • 默认情况下,该过程以定义者权限运行。执行过程时,仅使用直接授予过程所有者的权限。忽略通过角色授予的特权
  • 该过程归系统所有,默认情况下,系统不会直接向其授予
    执行过程
  • 但在您运行
    之前,请向系统授予执行过程-您几乎肯定不想将SYSTEM用于任何自定义代码

  • Google
    grant
    for Oracle查看系统的第4行。调用光标。@JonHeller:我创建了一个新的模式并尝试了相同的。。。但是不行。。。它运行所有的过程,但不是那些与动态代码ie执行立即。。。这一次,它给出了一个错误“找不到过程”。。我想我在运行动态程序时遇到了一个难题。。。有什么想法吗?当我从同一个过程中删除动态代码时,它运行良好,并生成所需的输出。。。所以我认为有一个陷阱@代码通常您可能希望尝试将过程定义为
    authid current\u user as…
    。然后,它将以当前执行代码的用户的权限运行,而不是拥有代码的用户的权限。在询问此问题之前,您是否这样做了。。。再做一次。。。格兰特成功了。。。但在执行时,输出仍然是“权限不足”。。。。此外,当我在所有_对象或任何其他表中搜索对象时,它不会返回任何结果。从所有_对象中选择*,其中object_name='call_para_cursor'。。。。。未选择任何行。也尝试了所有表(用户和所有)(过程和对象)。。。。但未选择任何行与sysdba连接并尝试将所有权限授予userName;登录sysdba并尝试了上述步骤,但没有成功。。。。相同的输出。。。“权限不足”@code您需要完全重新设计您正在做的事情。您的应用程序不应涉及SYSTEM或SYS。SYSTEM只是我使用的架构的名称。。所以,在同一模式中执行任何其他过程时,我也从来没有遇到过问题,这些过程也涉及到动态plsql。@codepoetly,您不应该在系统中执行任何操作。也许有一种方法可以让它发挥作用。但是,每当有人看到这个程序,他们要告诉你的第一件事就是使用不同的模式,所以你最好现在就改变它。