Hoş Geldin, Mühendis!

Tüm mühendislerin ve mühendis adaylarının yer aldığı forum sayfamıza kayıt olmalısınız. Kayıt olduktan sonra tüm ders notlarına, teknik dokümanlara erişim sağlayabilecek, sorularınızı sorup cevaplar verebileceksiniz. Sitemiz tamamiyle ücretsiz olmakla birlikte Mühendis Puanı sistemi uygulamaktadır.

Bilgi paylaştıkça çoğalır.

Premium Abonelik 📢

Premium abonelik ile sitemizi reklamsız gezebilir, dosyaları sınırsızca indirebilirsiniz.

Daha Fazlası

[Muhendisiz.NET] Tekrar Sizlerleyiz! 🎭

Mühendisiz.NET sitesi forum ve blog sayfası olarak tekrar yayın hayatına başladı. 🤩 Sizlerde forum sayfamıza üye olabilir ve mühendis topluluğumuza katılabilirsiniz.

Daha Fazlası

Mühendis Puanı Sistemi🏆

Bilgi paylaştıkça çoğalır felsefesini benimsemiş olmamız nedeniyle Mühendis Puanı sistemini uygulamaya aldık. Dökümanları indirebilmek için bazı paylaşımlarda bulunmalısınız. 📨

Daha Fazlası
  • Dosya indirebilmek için 2 Mühendis Puanına ihtiyacınız var. Konuya yorum atarak 1 MP Not paylaşarak 6 MP kazanırsınız.
    Bilgi Paylaştıkça Çoğalır. (Mühendislik Puanı (MP) Nedir?)
  • Mühendis Puanı kazanmaya vakti olmayanlar için ücretli premium üyelik sistemi aktif edilmiştir.
    (Premium Üyelik SATIN AL)

Oracle Database Alter System yetkisi olmayan kullanıcı Session Kill yapabilir mi ?

turkmedia

Moderatör
Katılım
8 Ara 2022
Mesajlar
840
Mühendis Puanı
1,774
Soru : Oracle veri tabanım üzerinde bir çok kullanıcım var. Bu kullanıcıların bazen session kill edilmesi gerekiyor. Alter system yetkisi vermeden bunu yapabilir miyim ?

Cevap : Evet, bir kullanıcının kill edilebilmesi için normal şartlarda " Alter System " yetkisi olması gerekir. Bunun yerine kullanıcıya özel bir prosedür ile session kill edebilirsiniz.

Örnek kodlar aşağıda verilmiştir.

Kod:
/* ilk olarak presedürümüzü yazıyoruz */

CREATE OR REPLACE PROCEDURE SYS.ABUZER_KILL_SESSION(p_sid NUMBER, p_serial NUMBER)
AS
    v_user VARCHAR2(30);
BEGIN
    SELECT MAX(username)
    INTO v_user
    FROM v$session
    WHERE sid = p_sid
    AND serial# = p_serial;
    IF v_user IN ('USR_ABUZER') THEN --KILL OLABILECEK KULLANICILAR BURAYA GIRILECEK
         EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION ''' || p_sid || ',' || p_serial || '''';
    ELSIF v_user IS NULL THEN
         RAISE_APPLICATION_ERROR(-20001,'Session Süresi bitti yada geçersiz SID / SERIAL');
    ELSE
         RAISE_APPLICATION_ERROR(-20002,'Bunun için yetkiniz yok.');
    END IF;
END ABUZER_KILL_SESSION;
/


/* Prosedür için yetki Veriyoruz */
GRANT EXECUTE ON sys.ABUZER_KILL_SESSION TO USR_ABUZER;

/* V$Session görüntüsü için yetki veriyoruz */
GRANT SELECT ON V_$SESSION TO USR_ABUZER;

/* Synonym Ekliyoruz */
CREATE OR REPLACE SYNONYM USR_ABUZER.ABUZER_KILL_SESSION FOR SYS.ABUZER_KILL_SESSION;

/* Aşağıdaki sorgu ile kullanıcılar açık sessionları görebilir. */
SELECT username,
       status,
       blocking_session,
       'EXEC ABUZER_KILL_SESSION (' || sid || ',' || serial# || ')' Kill_Command
  FROM v$session
 WHERE username IS NOT NULL AND TYPE <> 'BACKGROUND' AND USERNAME = 'USR_ABUZER'
 
/* Kullanıcı kendi Session numarasını görmek isterse */

SELECT SYS_CONTEXT ('USERENV', 'SID') FROM DUAL;
 

Son kaynaklar