小白今天以sys用户执行一条sql语句,报错如下:
GRANT EXECUTE ON SYS.KILL_SESSION TO wsj;
*ERROR at line 1:
ORA-04042: procedure, function, package, or package body does not exist
报错信息显示,某个存储过程,函数,package,package body不存在,小白细想了一下,这里所说的错误对象应该是SYS.KILL_SESSION,而sys是用户,也就是说sys用户下,没有KILL_SESSION的存储过程或者函数或者package或者package body??
于是小白去另外一个环境linux01中执行了sql语句:GRANT EXECUTE ON SYS.KILL_SESSION TO wsj; 执行成功,在linux101上面查看了一下KILL_SESSION到底是什么对象,查找结果:Procedure
在linux101上面找到了KILL_SESSION相应的sql语句,如下:
create or replace procedure kill_session
(
sessionid in varchar2 --session id
)
is
session varchar2(200);
str1 varchar2(255);
str2 varchar2(255);
begin
session := sessionid;
str1 := ' alter system kill session ';
str2 := str1 || '''' || session || '''';
--dbms_output.put_line(str2);
execute immediate str2;
end kill_session;
在那个sql语句执行不了的环境把上面德sql刷进去,问题解决:
SQL> grant EXECUTE ON SYS.KILL_SESSION TO wsj;
Grant succeeded.
本文详细记录了一个在不同环境下使用sys用户执行SQL语句时遇到权限问题的情况,通过对比两个环境的差异,最终通过创建和授予存储过程权限解决了问题。介绍了KILL_SESSION存储过程的功能及其实现方式,并分享了解决此类权限问题的步骤。
828

被折叠的 条评论
为什么被折叠?



