일반유저에게 kill session 권한 주기
2019.08.12 06:48
원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어
Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
원문 : 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