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.
Hiç yorum yok:
Yorum Gönder