12c New Fetures : Read Any Table Yetkisi Kullanımı

Oracle 12c versiyonu ile birlikte gelen read any table yetkisinin neyi ifade ettiğinden ve daha önceki versiyonlarda sıkça kullandığımız Select any table yetkisinden ne farkı olduğunu anlatmaya çalışacağım.

11g ve daha önceki versiyonlarda kullandığımız (12c versiyonu ile de kullanmaya devam ediyoruz bu arada) Select any table yetkisini bir kullanıcıya verdiğimiz de aslında o kullanıcının select attığı tabloyu LOCK edebilme yetkisini de vermiş oluyoruz. Kullanıcı aslında bunu iki şekilde sahip olmuş oluyor. Test edelim ;

Test1 adında yeni bir user create edip sadece bir tabloya select yetkisi verip neleri yapabildiğine bakalım.

===> create user test1 identified by test1
User created.
===> grant connect to test1
Grant complete.
===> grant select on kamil.test_table to test1
Grant complete.

Test tablomuzu bu user ile lock etmeye çalışalım (lock koymaya çalışalım);

===> lock table kamil.test_table IN share mode
Lock complete.

Select for update ile select çekmeye çalışalım ;

===> select owner from kamil.test_table where rownum< 2 for update ; OWNER ------ SYS 1 row selected. Her iki komutda sadece select yetkisi altında çalıştığını görmüş olduk. Dolayısıyla buda sadece select yetkisi olan bir kullanıcı nasıl olurda tabloya LOCK koyabilir sorusunun da cevabını vermiş olduk. Sanırım oracle bu açığı farketmiş olacakki read yetkisini 12c ile birlikte getirdi. Şimdi bunu test etmeye çalışalım. Test10 adı altında yeni bir user create edelim ve aynı işlemleri bununla da yapmaya çalışalım. ===> create user test10 identified by test10
User created.
===> grant connect to test10
Grant complete.
===> grant read on kamil.test_table to test10
Grant complete.
===> alter user test10 default role all
User altered.

Lock komutunu deneyelim ;

===> lock table kamil.test_table IN share mode
lock table kamil.test_table IN share mode
Error at line 1
ORA-01031: Yetkiler Yetersiz
Script Terminated on line 5.

Lock komutu için yetkiler yetersiz hatasını aldık. For update’ i deneyelim ;

===> select owner from kamil.test_table where rownum< 2 for update select owner from kamil.test_table where rownum< 2 for update * Error at line 1 ORA-01031: Yetkiler Yetersiz
Script Terminated on line 7.

Burada da aynı hatayı aldık.

Aynı senaryoyu ANY içinde düşünebilirsiniz. Tek fark sadece select any table yetkisi verildiğinde kullanıcı LOCK table komutunu çalıştıramıyor ama select for update ile yine tabloya lock koyma durumu devam ediyor.

===> revoke select on kamil.test_table from test1
Revoke complete.
===> grant select any table to test1
Grant complete.

Scriptleri test edelim;

===> lock table kamil.test_table IN share mode
lock table kamil.test_table IN share mode
Error at line 1
ORA-01031: Yetkiler Yetersiz

===> select owner from kamil.test_table where rownum< 2 for update OWNER ------ SYS 1 row selected. Auynı şekilde Read any table yetkisini test edelim. ===> revoke read on kamil.test_table from test10
Revoke complete.
===> grant read any table to test10
Grant complete.

Yetkiyi verdik, Lock table ve select for update’ i deneyelim;

===> lock table kamil.test_table IN share mode
lock table kamil.test_table IN share mode
Error at line 1
ORA-01031: Yetkiler Yetersiz

===> select owner from kamil.test_table where rownum < 2 for update select owner from kamil.test_table where rownum < 2 for update * Error at line 1 ORA-01031: Yetkiler Yetersiz
Script Terminated on line 7.

Her iki komutta read yetkisi verildiğinde çalışmıyor dolayısıyla select any table yerine artık bu komutu kullanmak faydalı olacaktır.

Be Sociable, Share!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


1 × = yedi