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.