원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++


system 유저가 아닌 일반유저도 kill session 할 권한이 필요하지만, 보안상 안전하지 않다.

대신에 DBA유저가 kill session 프로시저를 생성하여 일반유저에게 프로시저 실행권한을 줄 수 있다.



1. 프로시저 생성


SYS로 접속후


SQL> CREATE OR REPLACE PROCEDURE SP_KILL_SESSION (P_SID NUMBER, P_SERIAL NUMBER)
AS
V_USER_NAME   VARCHAR2 (30);
BEGIN

    SELECT USERNAME

    INTO V_USER_NAME
    FROM V$SESSION
    WHERE SID = P_SID AND SERIAL# = P_SERIAL;
        IF V_USER_NAME IN ('NONDBAUSER1, NONDBAUSER2')
            THEN
            EXECUTE IMMEDIATE
            'ALTER SYSTEM KILL SESSION ''' || P_SID || ',' || P_SERIAL || '''';
       ELSIF V_USER_NAME IS NULL
      THEN
      RAISE_APPLICATION_ERROR (-20001, 'Invalid Session ID');
      END IF;
 END SP_KILL_SESSION;
/



2. 일반유저에게 프로시저 실행권한 주기

SQL> grant execute on sys.SP_KILL_SESSION to <nondbauser>;


3. 프로시저 synonym 생성

SQL> CREATE SYNONYM <nondbauser>.SP_KILL_SESSION FOR SYS.SP_KILL_SESSION;


4. 일반유저에서 프로시저 실행 테스트


SQL> conn <non-dbausr>/<password>

SQL> SELECT SID, SERIAL# FROM V$SESSION WHERE USERNAME='<non-dbauser>';

        SID    SERIAL#
---------- ----------
      6718      29167
      3425      49921

SQL> exec SP_KILL_SESSION(6718,29167);

SQL> SELECT SID, SERIAL# FROM V$SESSION WHERE USERNAME='<non-dbauser>';

        SID    SERIAL#
---------- ----------
      3425      49921