Dozvola za ubijanje (sesija)

Thursday, 11.03.2010 – Dejan

Ne pro─Ĺe skoro nijedan dan, a da me barem jedan programer ne gnjavi da mu ubijem zablokiranu sesiju. Po┼íto nemam ba┼í vremena da se cimam i oko toga, odlu─Źio sam da svakom programeru dozvolim ubijanje vlastitih sesija.

Tako─Ĺe ne volim otkrivati toplu vodu, pa sam za ovaj problem malo proguglao i na┼íao sasvim zadovoljavaju─çe rje┼íenje od┬áToma Kyte-a, a ono izgleda ovako:

1. svakom programeru dodijeliti privilegiju, da mo┼że selektovati potrebne podatke iz v_$session (sid, serial#):

grant select on v_$session to programer;

2. Ako ve─ç nemate nekog “poweruser” korisnika (“non-SYS user with a DBA role“), onda kreirajte jednog, pa s tim korisni─Źkim nalogom┬ákreirajte jednu proceduru, koja ─çe ubijati ┼żeljenu sesiju:

create or replace procedure poweruser.kill_session( p_sid     in number,
                                                    p_serial# in number)
  is
      ignore          pls_integer;
  BEGIN
      select count(*) into ignore
        from V$session
       where username = USER
         and sid = p_sid
         and serial# = p_serial#;

      if ( ignore = 1 )
      then
          execute immediate '
              alter system kill session ''' ||
              to_char(p_sid,'999999')||','||
              to_char(p_serial#,'999999')||'''';
      else
          raise_application_error( -20001,
                                 'You do not own session ''' ||
                                  p_sid || ',' || p_serial# ||
                                 '''' );
      end if;
  END;
  /

3. dozvolite izvršavanje te procedure svim programerima:

grant execute on kill_session to programer;

To je to – nema vi┼íe svakodnevnog cimanja u vezi ubijanja sesija.

  1. One Response to “Dozvola za ubijanje (sesija)”

  2. I ja sam uradio ne┼íto sli─Źno. Za razliku od tvog re┼íenja, dodao sam informaciju o aplikaciji u client_info polje u v$session. Aplikacije sam napravio tako da na po─Źetku setuju client_info, pa kod slede─çeg ulaska u aplikaciju, ako postoji proces koji ima odgovaraju─çi podatak u client_info, sistem nudi da se ubije prethodno napravljeni proces.

    By Djordje on Mar 11, 2010

Post a Comment