oracle怎样给某个普通用户授予杀自己用户会话的权限

一 问题描述

想给某个普通用户授予杀掉自己会话的权限

二 解决办法

2.1 用sys用户创建杀会话的存储过程

create or replace procedure scott_p_kill_session

( v_sid number, v_serial number )

as

v_varchar2 varchar2(100);

begin

if v_sid is not null and v_serial is not null then

    for c in (select /*+ rule */

               s.username, s.inst_id, s.sid, s.serial#

                from gv$session s

               where

                s.sid = v_sid

                 and s.serial# = v_serial

                 and s.username='SCOTT'

                 ) loop

      dbms_output.put_line('alter system kill session ''' || c.sid || ',' ||

                             c.serial# || ',@' || c.inst_id ||

                             ''' immediate');

        execute immediate 'alter system kill session ''' || c.sid || ',' ||

                          c.serial# || ',@' || c.inst_id || ''' immediate';  

      end loop;

  else

    raise_application_error(-30000,

                            'Wrong number or types of arguments in call to ''kill_block_session''.');

  end if;   

end;

2.2 给该普通用户授权调用刚创建的存储过程

grant execute on scott_p_kill_session to scott;

2.3 杀会话示例

--用普通用户登录该会话所在数据库节点杀会话

--语法

exec sys.scott_p_kill_session(会话号,序列号);

--示例

exec sys.scott_p_kill_session(46,51);

--本篇文章参考自

oracle-权限-授予普通用户kill session权限-阿里云开发者社区

并做了些许改动。

你可能感兴趣的:(1,ORACLE,学习,oracle)