Alter system yetkisi olmayan kullanıcıların session kill edebilmelerinin sağlanması
Uygulama geliştiriciler , çoğunlukla uzun süren yada sorun olduğu düşündükleri oturumları kill etmek isterler. Fakat uygulama geliştiricilerin ALTER SYSTEM yetkisi olmadığından session kill komutunu çalıştıramazlar . Ayrıca bu yetkinin dba olmayan kullanıcılara verilmesi de tehlikelidir ve verilmemelidir.
Hem yetki vermeyelim hem de session kill edebilsin istediğimizde çözüm, oturumları kill eden bir prosedür yazıp bu prosedür için ilgili kullanıcıya execute yetkisi vermektir.
Aşağıdaki prosedürü SYS kullanıcısı altında oluşturup, ilgili kullanıcıya execute hakkı verdiğinizde , o kullanıcı da alter system olmadan session’ları sonlandırma yetkisine sahip olacaktır.
Gerekli prosedür :
CREATE OR REPLACE PROCEDURE kill_session(prm_sid NUMBER,
prm_inst_id NUMBER DEFAULT 1) AS
l_user VARCHAR2(30);
l_serial NUMBER;
l_inst_id NUMBER;
BEGIN
SELECT t.username, t.SERIAL#, t.INST_ID
INTO l_user, l_serial, l_inst_id
FROM gv$session t
WHERE t.sid = prm_sid
AND t.INST_ID = prm_inst_id;
IF l_user IS NOT NULL AND l_user NOT IN ('SYS', 'SYSTEM') THEN
EXECUTE IMMEDIATE 'alter system kill session ''' || prm_sid || ',' ||
l_serial || ',@' || prm_inst_id || '''';
dbms_output.put_line(prm_sid || ' idli session kill edildi.');
ELSE
raise_application_error(-20000, 'Sistem session''ı kill edilemez');
END IF;
END;
/
Gerekli Yetkilendirme :
grant execute on kill_session to KULLANICI;
![]()
