Database’ de yer alan kullanıcıların zaman zaman gruplandırılması sonrasında da ihtiyaçlara göre bu kullanıcıların passwordlerinin nasıl olması gerektiğini ve resource kullanımlarında gerekiyorsa kısıtlamaya gidilmesini/izin verilmesini sağlayabiliriz.
Örneğin application userlarının passwordleri asla expire olmamalı ve resource’ dan en fazla kaynak bu kullanıcılarda olmalıdır. Ancak internal userların, internal userlardan kastım developerların, dba’ lerin, güvenlik personeline ait userların vs.. passwordleri belirli aralıklarda değiştirilmeye zorlanmalı, database’ e bağlantı kurmaya çalışırken yapılan denemeler sonrasında (X kere) başarısız olunması durumunda accountun locklanması gibi bir takım ayarlar set edilebilmektedir.
Profile kullanımı aslında 2 farklı kapsamda değerlendirilmelidir. Birinci user bazlı resource kontrolü için, diğeri ise user bazlı password management ‘ ı yapmak için kullanılabilir. Ancak sıklıkla profile kullanımına gidilmesinin uygulamadaki en fazla nedeni password politikalarını belirlemek ve tüm userları bu kapsamda yönetmek olmaktadır. Oracle 11g ile birlikte profile create ederken neleri nasıl set edebiliriz onlara bakalım ;
Resource Kullanımı ile İlgili Parametreler ;
SESSIONS_PER_USER ; Bir userın aynı anda açabileceği maxiumum session sayısını ifade eder.
CPU_PER_SESSION ; Session bazında kullanılabilecek olan maximum CPU time değerini ifade eder (bu değer (microsecond) burada saniyenin yüzde biri olarak ifade edilir)
CPU_PER_CALL ; Session bazında çalıştırılan sql veya plsql’ le işlemlerinde kullanılabilecek maxiumum CPU time değerini ifade eder. (değer microsecond)
CONNECT_TIME ; Bir sessionın sistemde kalabileceği maximum zamanı dakika cinsinden ifade eder.
IDLE_TIME ; Sistemdeki inactive durumda olan sessionların kaç dakika sonra expire olacağını ifade eder. Uzun soluklu sorgular bu kapsamda değildir.
LOGICAL_READS_PER_SESSION ; Bir sessionının okuyabileceği maximum block sayısını ifad eder. Burada okunan bloğun diskden veya memory okunuyor olmaması farketmemektedir.
LOGICAL_READS_PER_CALL ; Session içerisinde çalıştırılan sql veya plsql’ lerde okunabilecek olan maximum block sayısını ifade eder.
PRIVATE_SGA ; Sessionın SGA içerisinden kullanabileceği maximum size’ ı likobayt cinsinden ifade eder. Ancak bu paramete shared server olarak create edilmiş olan instance’ larda geçerlidir.
COMPOSITE_LIMIT ; Bu parametre ile bir sessionın kullanabileceği maximum kaynak miktarıdır. Bu kaynak cpu_per_session, connect_time, logical_reads_per_session ve PRIVATE_SGA değerlerinin toplamını ifade etmektedir.
Password Yönetimi ile İlgili Parametreler ;
FAILED_LOGIN_ATTEMPTS ; Bu parametre ile kullanıcının hesabının kilitlenmesi için girilebilecek maxiumum yanlış parola sayısını ifade etmektedir. Bu parametrenin default olarak bırakılması durumunda (bu parametre için default = 10 olduğundan dolayı) 10 defa şifrenin hatalı girilmesi durumunda account otomatik olarak locklanacaktır.
PASSWORD_LIFE_TIME ; Kullanıcının set etmiş olduğu passwordün ne kadar süre ile (gün bazında) geçerli olacağının set edileceği parametredir. Bu parametre için default değer 180 gündür.
PASSWORD_REUSE_TIME ; Kullanıcıya kullanmış olduğu eski bir paswordu tekrar kullanabilmesi geçen geçmesi gereken gün sayısını ifade eder.
PASSWORD_REUSE_MAX ; Kullanıcıya kullanmış olduğu eski bir paswordu tekrar kullanabilmesi geçen geçmesi gereken parola sayısını ifade eder.
PASSWORD_LOCK_TIME ; Kullanıcının accountu locklandıkdan sonra (yani failed_logon_attempts sayısısına ulaşıldıkdan sonra) accountun kaç gün süreyle locklı kalacağının set edildiği parametredir. (Default değeri 1 gündür)
PASSWORD_GRACE_TIME ; Kullanıcının password_life_time parametresi ile belirtilmiş olan değere ulaşmasından sonra kullanıcılara yeni passwordlerini vermeleri için gerekli süreyi tanıyan parametredir. Default değeri 7 gündür ancak bu zaman zarfında eski parolada kullanılamayacaktır.
PASSWORD_VERIFY_FUNCTION ; Password_verify_function parametresi ile kullanıcının passwordunu belirlerken uyması gereken kuralların plsql yardımı ile belirlendiği ve burada da set edildiği parametredir.
Yukarıdaki parametreleri set ederken parametrelere değer girmek yerine UNLIMITED veya DEFAULT olarak da set edebilirsiniz. Bu iki farklı kavramlardır. Unlimited olarak set edildiğinde ilgili parametre için bir limit vermemiş olursunuz. Ancak Default olarak set ettiğinizde ise kullanıcı öncesinde sistem tarafından tanımlanmış olan bazı limitler ile sınırlandırılmış olacaktır.
Yeni bir profile create etmek istersek ;
SQL> CREATE PROFILE TEST_PROFILE LIMIT
SESSIONS_PER_USER DEFAULT
CPU_PER_SESSION DEFAULT
CPU_PER_CALL DEFAULT
CONNECT_TIME DEFAULT
IDLE_TIME DEFAULT
LOGICAL_READS_PER_SESSION DEFAULT
LOGICAL_READS_PER_CALL DEFAULT
COMPOSITE_LIMIT DEFAULT
PRIVATE_SGA DEFAULT
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LIFE_TIME 1
PASSWORD_REUSE_TIME 1
PASSWORD_REUSE_MAX 5
PASSWORD_LOCK_TIME 10
PASSWORD_GRACE_TIME 0
PASSWORD_VERIFY_FUNCTION DEFAULT
Profile created.
Bu profile’ i bir user’ a atamak istersek ;
SQL> alter user kamil profile TEST_PROFILE
User altered.
Profile’ daki limitlere takılması durumunda örneğin yukarıdaki örnekde failed logon 3 olarak set edilmiş yani 3 defa şifreyi yanlış girmemiz durumunda ;
ORA-28000: the account is locked
hatasını almaya başlarız.
Profile create edildikden sonra bazı değerleri değiştirmek istersek de;
Alter profile profile_name limit parametre_adı yeni_deger ;
Şeklinde alter edebilirsiniz. Aşağıda bazı parametreler örneklerini bulabilirsiniz ;
SQL> alter profile test_profile limit PASSWORD_GRACE_TIME 2
Profile altered.
SQL> alter profile test_profile limit PASSWORD_LOCK_TIME 2
Profile altered.
SQL> alter profile test_profile limit PASSWORD_reuse_max 1
Profile altered.
SQL> alter profile test_profile limit PASSWORD_reuse_time 2
Profile altered.
SQL> alter profile test_profile limit PASSWORD_LOCK_TIME 5
Profile altered.
SQL> alter profile test_profile limit SESSIONS_PER_USER 10
Profile altered.
SQL> alter profile test_profile limit connect_time 60
Profile altered.
Userın durumunu sorgulamak istediğimizde ;
SQL> select username, account_status, profile from dba_users where username = ‘KAMIL’
USERNAME ACCOUNT_STATUS PROFILE
——- ————– ———————
KAMIL EXPIRED(GRACE) & LOCKED(TIMED) TEST_PROFILE
1 row selected.
Profile’ i drop etmek istersek ;
SQL> drop profile test_profile
drop profile test_profile
Error at line 1
ORA-02382: profile TEST_PROFILE has users assigned, cannot drop without CASCADE
Eğer bir profile bir usera atanmış ise o profile yukarıdaki komut ile drop edemezsiniz. Drop edilecek profile’ in database’ de kimseye atanmamış olmaması gerekiyor.
İkinci yöntem olarak siz profile’ in kullanılıp kullanılmadığına bakmaksızın drop etmek istiyorsanız o zaman CASCADE opsiyonu kullanmamız gerekmektedir.
drop profile test_profile cascade ;
Profile dropped.
Selam Amine,
Resource manager ile profile ‘ i karşılaştırdığında profile üzerinden yapılan kısıtlamalar resource manager’ ın yanında devede kulak kalıyor diyebiliriz. Resource manager kullanımı daha complex implementasyonu ve sonrasında yönetilmesi nispeten profile’ e göre daha zor olduğunu söyleyebiliriz. Ancak düzgün yönetildiğinde database’ de kritik olan ve her durumda çalışması gereken processlerin çalışması garanti altına alınabilmektedir.
Hocam profile ile database resource manager ın -kaynak yönetimi adına- farkı nedir? profile varken niye DRM ı keşfetmişler?