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错误的有效方法。