ORA-31133: Cannot execute handler “string”.”string” with invoker rights

文档解释

ORA-31133: Cannot execute handler “string”.”string” with invoker rights

Cause: Attempted to invoke an event handler with invoker rights when the SET-INVOKER attribute in the resource configuration that defines the handler was not set to TRUE.

Action: Either redefine the named handler with definer rights or change the SET-INVOKER attribute in the resource configuration that defines the named handler to TRUE.

ORA-31133:

错误说明:

ORA-31133触发器错误,指明无法使用相关“[用户/过程|函数]”(调用者权利),这是因为调用者没有执行这个行为所需要的权限。在Oracle数据库中,授权和调用者是不同的概念,对对象的权限只有授权者有。

常见案例

当用户尝试访问一个模式中的特定对象(如存储过程,函数,视图,包)时,就可能会出现ORA-31133错误。例如,当用户尝试使用存储过程时,ORA-31133错误可能会出现:

SQL> EXECUTE MY_PACKAGE.MY_PROCEDURE;

BEGIN MY_PACKAGE.MY_PROCEDURE; END;

*

ERROR at line 1:

ORA-31133: cannot execute MY_PACKAGE.MY_PROCEDURE with invoker rights

解决方法

要解决ORA-31133错误,可以在过程或函数所在的模式中给用户授予EXECUTE权限:

GRANT EXECUTE ON MY_PACKAGE.MY_PROCEDURE TO MY_USER;

EXECUTE MY_PACKAGE.MY_PROCEDURE;

BEGIN MY_PACKAGE.MY_PROCEDURE; END;

/

此外,还可以检查用户是否已给其拥有的模式的所有权限。在上面的例子中,可以检查MY_USER是否拥有MY_PACKAGE模式的所有权限:

GRANT ALL ON MY_PACKAGE TO MY_USER;

由于在ORA-31133错误中,原因通常是用户缺少权限,所以把相关模式授予所有权限也是解决ORA-31133错误的有效方法。

你可能感兴趣的