* Bir user’ın kendi şemasında her türlü işlemi yapabilmesi için aşağıdaki haklar yeterlidir: GRANT RESOURCE TO ayse; GRANT CONNECT TO ayse; ALTER USER ayse DEFAULT ROLE ALL; * Create any table ve select hr.countries hakları olan bir role tanımlayıp user’a atayınız ve test ediniz.
User Profile: Güvenlik açısından önemli bir tanımdır. Kullanıcı yaratılırken belirtilmezse default profile’a atar oracle. En çok kullanılan kaynakları; CONNECT_TIME : Dakika bazında, sessionlar için kabul edilen bağlantı zamanını düzenler. alter profile limit connect_time 300;
IDLE_TIME : Bir session'ın hiçbir DML/DDL komutu kullanmadan beklediği süreye denir. Eğer kullanıcı bu süreyi aşarsa, session'ı Oracle tarafından öldürülür. Yine dakika bazında değer verilebilmektedir. alter profile limit idle_time 10; SESSIONS_PER_USER : Bir kullanıcı için kabul edilebilen toplam session sayısıdır. Eğer bu değeri 2 olarak belirlersek kullanıcı en fazla 2 session yaratabilir. Yani 1 schema'da 1 kullanıcıya ait toplam 2 session açılabilir. alter profile limit sessions_per_user 2; --> Default olarak unlimited seçilir.
FAILED_LOGIN_ATTEMPTS : Güvenlik açısından kritik bir kaynaktır FAILED_LOGIN_ATTEMPTS : Güvenlik açısından kritik bir kaynaktır. alter profile limit failed_login_attempts 4; 4 denemeden sonra kullanıcının hesabı kilitlenecektir.
Password parametreleri set edilirken rakamlar gün sayısını ifade eder fakat dakika olarak set edilmek istenirse (n/1440) kullanılabilir, ya da saniye için(n/86400) kullanılabilir. PASSWORD_LIFE_TIME: Aynı password ile kaç gün login olunabileceğini ifade eder. PASSWORD_REUSE_TIME: Bir password’ün tekrar kullanılabilmesi için geçmesi gereken gün sayısını ifade eder.
PASSWORD_REUSE_MAX: Şu anki password’ün tekrar kullanılabilmesi için kaç defa password değişikliği yapılması gerektiğini gösterir. PASSWORD_LOCK_TIME: Bir kullanıcı failed login attempts sınırını aştığında hesabının kaç gün lock’lı kalacağını belirler. PASSWORD_GRACE_TIME : Password_life_time sınırı aşıldıktan sonra verilen extra süre.
PASSWORD_VERIFY_FUNCTION: Password’ün nasıl olabileceğini ya da olamayacağını belirleyen fonksiyondur. Oracle default bir script sağlar, bununla beraber kendi fonsiyonumuzu da oluşturabiliriz. ALTER PROFILE my_profile LIMIT PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION; alter user ayse profile my_profile; ÖRNEK: En fazla 10 session açabilecek şekilde,hatalı login olma sınırı 3, aynı password ile 200 dk login olunacak şekilde bir profile create ediniz. Ve bu profile’i x kullanıcısına set ediniz.
CREATE PROFILE my_profile LIMIT SESSIONS_PER_USER 10 FAILED_LOGIN_ATTEMPTS 3 PASSWORD LIFE TIME 200/1440; Alter user ayse profile my_profile;
Transaction Isolation Level: Yapılan bir transaction’ın diğer transactionlara karşı ne kadar izole edilmesi istendiğini belirtmektir. Tipleri; Read Committed Serializable Read Only
Dirty Read: Commit edilmemiş data demektir Dirty Read: Commit edilmemiş data demektir. Oracle dirty datanın okunmasına izin vermez. Başka bir kullanıcı tarafından read yapıldığında en son commit edilmiş hali okunur. Non-repeatable Read: t1 anında bir satırı okuduğumuzda aldığımız veri ile t2 anında okuduğumuz veri aynı olmayabilir. Update görmüş, silinmiş vb olabilir. Phantom Reads: Transaction A where sözcüğüyle bir select çalıştırdıktan sonra, B Transaction’ı where şartını sağlayan bir insert yaparsa, A aynı sorguyu tekrar çalıştırdığında farklı sonuç alacaktır.
Read Committed Transaction Isolation Level : Oracle’ın default transaction isolation levelidir. Bir sorgu çalıştırıldığında o ana kadar commit edilmiş data bilgileri okunur. Dirty read yapılmaz. SET TRANSACTION ISOLATION LEVEL READ COMMITTED; ALTER SESSION SET ISOLATION_LEVEL READ COMMITTED;
Read Uncommited Transaction Isolation Level : Dirty read yapılmasını sağlar. Oracle buna izin vermez.
Serializable Transaction Isolation Level : Read Committed’a ek olarak, kendi içinde yaptığı INSERT,UPDATE ve DELETE statementlarına da izin verir. SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE;
Read-Only Transaction Isolation Level: Read Committed gibidir ama INSERT, UPDATE ve DELETE işlemlerinin yapılmasına izin vermeyen transaction’lardır. SET TRANSACTION ISOLATION LEVEL READONLY; ALTER SESSION SET ISOLATION_LEVEL READONLY;
Aşağıdaki query ile transaction’un isolation level’inin ne olduğu görülebilir: select decode (bitand (t.flag, power (2, 28)), power (2, 28), 'SERIALIZABLE', 'READ COMMITTED') from v$transaction t, v$session s where s.taddr = t.addr and s.audsid = userenv ('sessionid');
ORACLE LOCK YÖNETİMİ: Bir DML işlemi çalışırken, başka bir dml işleminin aynı data üzerinde etki etmesini önleme mekanizmasına Oracle Lock Mekanizması denir. Transactionlar dataları row seviyesinde ya da tüm bir tablo seviyesinde lock’layabilirler. Lock’lama işlemi manuel sağlanabileceği gibi otomatik olarak da sağlanabilir.
Lock Çeşitleri: DML Lock (Update, Insert vb..): İşlem yapılacak olan satırı ya da satırları kilitler. DDL Lock (Create , Alter, Drop vb..): Nesnelerin yeniden tanımlanmasını engeller. Dictionary locks olarak da bilinir.Objelerin yapılarını korumaktan sorumludur. Latches and Internal locks Datafile’lar gibi Oracle’ın kendi sistemi ile ilgili objelerin yapılarının korunmasından sorumludur, bunlar otomatiktir
DML locks :Kendi içinde Row locks(TX)ve table locks(TM) olarak 2ye ayrilir. Row-level lock(TX) DML işlemi yapılırken ilgili row 'un sağlıklı bir şekilde işlem sonuna kadar yeni bir dml işlemi için izin verilmemesi işidir. Enqueue ise bu gibi durumlarda başlatılan yeni dml işlemlerinin sıraya konması ve lock gerçekleştirilen dml işlemi commit yada rollback ile bittiğinde işleme alınması olayıdır. Normal Select işlemlerinde TX kullanılmaz. Table-level lock(TM)Oracle default lock model row-level lock mekanizmasıdır.Ancak Manuel olarak daha yüksek seviyede locklama yapılabilir.Aşağıdaki script tablo yu locklamaktadır. LOCK TABLE HR.EMPLOYEES IN EXCLUSIVE MODE;
Aşağıdaki row lock’ı gerçekleyiniz.
Lock’lı session’ları nasıl buluruz Lock’lı session’ları nasıl buluruz? gv$session & gv$sql join kolonu sql_id Bir tabloyu hangi session’lar tutuyor? gv$access & gv$session join kolonu sid
DeadLock: Eğer bir veri bir session tarafından locklanmışsa ve birden çok session tarafından bekleniyorsa, bu tip lock olayına dead lock denir.Oracle veritabanı dead lock ları tespit ederek statementlerın hata ile sonlandırılmasını sağlar.Bu durumda bekleyen sessionlar dml işlemlerini tamamlayabilirler.