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; 

 

 

Loading

Leave Your Comment