19 Ocak 2011 Çarşamba

Kullanıcı Hesabını Package Yardımı İle Açma – Kapatma


Merhaba Arkadaşlar, 

Öncelikle başlığı okudukdan sonra şöyle bir soru sorulabilir, alter user XXXX account lock / unlock ile zaten bu işlemi yapıyoruz. Neden bunu bir package aracılığı ile yapmak isteyeyimki diye düşünebilirsiniz, Evet bu işlemi yapacak olan kullanıcıya Alter User yetkisini vermek için önünüzde bir engel yoksa böyle bir package’ a da ihtiyacınız yok demektir. Ancak BDDK denetimine tabi olan kurumlarda bu tarz yetkilerin kullanıcılarda olmasına pek izin verilmiyor (dba’ ler hariç tabiki) Hal böyle bu işlemi yapacak olan kullanıcıya sadece aşağıdaki package için execute yetkisi vermeniz yeterli oluyor. Package kısaca şunu yapıyor benim belirlemiş olduğum kullanıcıların accountlarının durumlarını değiştirme yetkisi veriyor. Özetle bu aslında, şimdi create edip bir örnek yapalım ;

CREATE OR REPLACE procedure kamil.UserLockUnlock(pUserName in varchar2, pLockUnlock in varchar2)
is
  icount          pls_integer;
BEGIN
    select count(*) into icount
    from dba_users
    where username = upper(pusername);
    if (icount > 0)then
                   if  upper(substr(pUserName,1,4)) = 'USER' or upper(substr(pUserName,1,6)) = 'GECICI' Then
                                   if upper(plockUnlock) = 'L' Then
                                                 execute immediate 'alter user ' || pUserName || ' account lock';
                                                 dbms_output.put_line('Kullanıcı Hesabı Kilitlendi.');
                                  elsif upper(plockUnlock) = 'U' Then
                                                 execute immediate 'alter user ' || pUserName || ' account unlock';
                                     dbms_output.put_line('Kullanıcı Hesabı Açıldı.');
                                  else
                                raise_application_error( -20001, 'Kullanıcıyı Açmak için U , Kilitlemek için L girmelisiniz!');
                                  end if;
                        Else
                raise_application_error( -20001, 'Bu kullanıcı için yetkiniz yoktur!');
                       end if;
    else
        raise_application_error( -20001, 'Kullanıcı mevcut değil!');
    end if;
END;
/

Package’ ımızın ismi kamil.UserLockUnlock ve bu package 2 tane değişkenle call ediyoruz.
Birincisi üzerinde işlem yapacağımız USERNAME bilgisi diğeri ise yapmak istediğimiz işlemin ne olduğu, accountu açacakmıyız, kapatacakmıyız.  Bizim örneğimizde kullanıcı ismi USER ve GECICI ile başlayan kullanıcı adlarında sadece işlem yapılabilinir.  Bunun dışındaki userlar için işlem yapılmak istenirse, hata dönecektir. Yapılacak olan işlemin type’ ları içinse “L” gönderilirse LOCK, “U” gönderilirse “UNLOCK” işlemi yapılacaktır.  Örneğin USER_OZSOY  kullanıcısın accountunu lock yapmak istersek ;

begin
        kamil.LockUnlockUser('USER_OZSOY','L');
end;
   
USER_OZSOY hesabını unlock etmek istersek de ;

begin
        kamil.LockUnlockUser('TEMP_OZSOY','U');
end;

komutlarını çalıştırmamız yeterli olacaktır.



Kamil TÜRKYILMAZ 

Hiç yorum yok: