Oracle 12c New Features : DBMS_PRIVILEGE_CAPTURE Package

Database’ in güvenliğinin sağlanması için belirli periyotlar arasında şirketlerin güvenlik birimleri aracılığıyla (özellikle bankalar bu konuda en hassas olan kurumlardır) database’ deki kullanıcıların yetkileri sorgulanır ve fazla olduğu düşünülen yetkilerin revoke edilmesi istenir. Ancak production sistemlerde yetki almak kimi aman çokda kolay olmamaktadır. Yetki revoke edildiğinde uygulamanın bu durumdan etkilenip etkilenmeyeceği, ilgili user tarafından bu yetkinin kullanılıp kullanılmadığı tam olarak kestirilemediği durumlar olabiliyor. Hal böyle oluncada yetkiyi revoke etmeye cesaret edilemediği durumlar yaşanmıyor değil 

Oracle 12c ile birlikte aslında bu soruna cevap bulunmuş oldu. Dbms_privilege_capture paketi ile kullanılan user hangi yetkinin kullanıldığını capture eden faydalı bir package’ dir. Privilege kullanıldığı zaman capture edildiğinden dolayı bu paket aracılığıyla toplanan yetkiler kullanılan yetkiler olarak yorumlanmalıdır.

Şimdi bu işlemi nasıl yapabileceğimiz den ve dbms_capture_privilege paketinin kullanımından bahsedelim.

DBMS_PRIVILEGE_CAPTURE paketinin spec’ ine baktığınız da 5 adet procedureden oluştuğunu görebilirsiniz.

Procedurelerin nasıl kullanılacağına geçmeden önce bu procedurelerin ne amaçla kullanıldığından sonrasında da özellikle create_capture procedurundaki input ların neler olduğuna bakalım.

• Create Capture :
Analiz edilmek için privilege ilgili olarak spesifik bir takım conditionlar da belirtilerek policy’ nin create edilmesini sağlar.

Policy create edlirken input olarak belirlenmesi gereken bazı alanlar bulunmaktadır ;

Name : Oluşturulması istenilen policy’ e verilecek olan ismi ifade eder. 30 karakter uzunluğunda istediğiniz ismi verebilirsiniz.

Description : Oluşturulacak olan policy ile (varsa) açıklama girebileceğiniz alandır. 1024 karaktere kadar bu alana açıklama yazabilirsiniz.

Type : Privilege analizi ile ilgili oractle tarafından belirlenmiş olan 4 farklı type bulunmaktadır. Dolayısıyla policy oluşturmak istediğiniz de bu 4 adet policy’ den size en uygun olanı seçmek durumundasınız. Bu type’ ların ne olduğuna bakalım ;

G_DATABASE : Database içerisinde kullanılan tüm privilege’ ları capture etmek istediğiniz de bunu kullanabilirsiniz. SYS userı kapsam dışıdır. SYS’ nin kullandığı privilege’ ları capture edemezsiniz.

G_ROLE : Spesifik bir role veya rol içerisindeki bir privilege capture edilmek istenildiğinde bu type’ ı kullanabilirsiniz.

G_CONTEXT : Condition parametresi ile spesifik olarak bir koşul belirlenmiş olan privilege’ lerin capture edilmesini sağlar.

G_ROLE_AND_CONTEXT : G_role ve g_context’ in birleşimini ifade etmektedir. Capture edilmek istenilen privilege bir role içerisindeyse ve condition parametresi ile spesifik bir koşula göre capture edilmek isteniyorsa bu type ‘ ı kullanabiliriz.

Roles : Spesifik olarak capture edilmek istenilen rollerin tanımlandığı kısım.

Condition : Capture edilecek olan role ile ilgili spesifik olarak koşulların tanımlandığı kısım.

• Enable Capture :
Create edilen procedure’ un aktivite edilmesini sağlar. Policy ‘ in enable edilmesinden sonra policy yetkileri capture etmeye başlayacaktır.

• Disable Capture :
Create edilen policy’ nin disable edilerek capture işleminin stop edilmesini sağlar.

• Drop Capture:
Create edilmiş olan policy’ nin drop edilmesini sağlar.

• Generate Result :
Oluşturulan policy ile birlikte capture edilen yetkilerin ilgili view’ ler aracılığıyla görüntülenmesini sağlar.

DBMS_PRIVILEGE_CAPTURE İle İlgili performans Viewleri

Dbms_privilege_capture paketi ile kullanılan yetkilerin caprure edilmesi sonrasında generate_result ile aşağıdaki listede belirtilmiş olan view’ lerden sonuçları gözlemleyebilirsiniz. Toplamda 16 adet bu amaçla kullanabileceğimiz view bulunmaktadır. Kulanılan yetkiler, kullanımayan yetkiler, system yetkileri, object yetkileri vs gibi bilgiler için ayrı ayrı viewler oluşturulmuştur. Reference kısmında belirtmiş olduğum oracle dökümanından bu viewler ile ilgili detaylı bilgiye ulaşabilirsiniz. Aşağıdaki örnek de de viewlerin bir kısmının ne için kullanıldığını örnek üzerinden açıklamaya çalıştım.

DBA_PRIV_CAPTURES
DBA_USED_OBJPRIVS
DBA_USED_OBJPRIVS_PATH
DBA_USED_PRIVS
DBA_USED_PUBPRIVS
DBA_USED_SYSPRIVS
DBA_USED_SYSPRIVS_PATH
DBA_USED_USERPRIVS
DBA_USED_USERPRIVS_PATH
DBA_UNUSED_OBJPRIVS
DBA_UNUSED_OBJPRIVS_PATH
DBA_UNUSED_PRIVS
DBA_UNUSED_SYSPRIVS
DBA_UNUSED_SYSPRIVS_PATH
DBA_UNUSED_USERPRIVS
DBA_UNUSED_USERPRIVS_PATH

Dbms_privilege_capture paketinin kullanımı ile ilgili örneklere bakalım. Burada örnek olarak bir durumu uçtan uca test edelim ancak sonrasında paketin kullanımı ile ilgili farklı örnekleride script olarak veriyor olacağım.

Bir örnek ile devam edelim ;

Databasede kullanılan tüm yetkileri capture etmeye çalışalım ;

Oluşturmuş olduğumuz policy’ i enable ederek capture işlemini başlatalım ;

Şimdi sample işlemler yapalım farklı userlar ile ;

Policy’ imizi disable edelim. Artık capture etme işlemini durdurabiliriz.

Şimdi raporu generate edelim ;

Şimdide yukarıda belirttiğimiz viewleri kontrol edelim, hangi policy’ lerimiz var, hangi yetkiler kim tarafından kullanılmış vs.

Database’ de oluşturulmuş olan policy’ leri select etmek için ;

Database’ de hangi object yetkilerinin kullanıldığını görmek için ;

Userın yetkisi olupda kullanılmayan object yetkileri select etmek için ;

User üzerinde olup da kullanılmayan role ve system yetkilerini select etmek için ;

Analiz edilen policy içerisinde kullanılmayan yetkileri system privilege grant pathleri ile birlikte listelemek için ;

Bu şekilde kritik bir userdan bir yetkiyi almadan önce bir süre izleyerek hangi yetkileri kullandığından emin olabilirsiniz.

Policy create ederken condition olarak neler verebiliriz onunla ilgili bikaç örnek verelim;

Spesifik bir role ün kullanımını izlemek istersek ;

Birden fazla role ün kullanımını izlemek istersek de;

Belirlenen spesifik rollerin yine belirlenen bazı userlar tarafından kullanılıp kullanılmadığını izlemek için;

X bir userın sqlplus kullanarak gelen connectionlarında kullandığı yetkileri görmek icin ;

X bir userın spesifik bir ip’ den geldiğindeki kullandığı yetkileri yakalamak icin ;

Son olarak iki user’ın 2 spesifik iki role’ ü kullanıp kullanmadığını capture etmek istersek de ;

scriptlerini kullanabiliriz. Yaptığımız demo ve yukarıdaki verdiğimiz örnekler paketin kullanımının anlaşılması için yeterli olacaktır diye düşünüyorum. Dbms_privilege_capture paketi ile çalışırken alabileceğiniz muhtemel hatalardan da kısaca bahsedelim ;

Oluşturmuş olduğunuz policy’ leri enable etmeye çalışırken yukarıdaki gibi bir hata alabilirsiniz. Nedeni capture etmeye çalıştığınız privilege’ ların başka bir policy içerisinden zaten capture ediliyor olmasındandır. Buda duplicate iş yapmamanız açısından oluşturulmuş güzel bir kontrol noktasıdır.

Yukarıdaki hata da enable durumda olan bir policy’ i drop etmeye çalıştığınız da alacağınız bir hatadır. Enable durumdaki bir policy’ si drop etmek istiyorsanız önce disable etmeniz gerekecektir.

Son olarak, test için bir sürü policy create ettik, temizlik yapalım ve oluşturduğumuz policy’ leri drop edelim. Policy’ lerimiz;

Drop edelim;

Reference;
https://docs.oracle.com/database/121/DVADM/priv_analysis.htm#DVADM673
http://docs.oracle.com/database/121/ARPLS/d_priv_prof.htm#ARPLS74343

Be Sociable, Share!

Bir cevap yazın

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


8 − dört =