24 Eylül 2009 Perşembe

Oracle' da rol istisnaları

Oracle veritabanında (rol kullanımından kaynaklanan) karşılaştığım bazı özel durumları not etmek istiyorum. Aslında bunlar bug olarak düşünülebilir fakat bu tarz bugların çözümüne yönelik bir şey yapılmayabilir.

Örneğin DBA rolüne sahip bir kullanıcı bile teorik olarak CREATE ANY MATERIALIZED VIEW, CREATE PUBLIC DATABASE LINK yetkileri olmasına rağmen başka bir kullanıcı altına bir DB link veya Materialized View create edemez.

Aşağıda karşılaştığım istisnaları ve çözümlerini kısaca açıklamaya çalıştım. Zaman buldukça ve karşılaştıkça yeni istinasları da eklemeyi düşünüyorum.

--Nesne Hakları
Genel kural:
Bir kullanıcının yetkisi olan bir objeyi bir procedure/function/pkg/view içinde kullanabilmesi için nesne üzerinde direk hakkı olması gerekiyor.
Mesela kullanıcının tablo üzerindeki rol üzerinden gelen hakları kullanıcının create edeceği herhangi bir SP içinde geçersiz oluyor. Bu durumda tablo için doğrudan yetki talebine ihtiyaç var.
Örneğin kullanıcı role üzerinden yetkisi olduğu bir tabloyu bir prosedür içinde select edemez. kendi schemasındaki prosedür içinde o tabloyu sorgulayabilmek için kullanıcıya doğrudan select hakkı verilmesi gerekiyor. (uygulama kullanıcıları ile normal kullanıcıları ayırmak bu yüzden de gerekli)

--DBLINK

DB link create edebilmek için şu 2 yöntem kullanabiliriz.
1. DB linki oluşturmak istediğimiz kullanıcıya yetki verip o kullanıcı ile login olup, linki oluşturmak ve yetkiyi geri almak.
2. DB linki oluşturmak istediğimiz schemaya yetki verip db link create scriptini çalıştıracak bir prosedürü o şema altında oluşturmak, prosedürü çalıştırmak, prosedürü drop etmek ve yetkiyi geri almak.

--MVIEW
Metarialized Veiw create etmek için role den bağımsız CREATE ANY MATERIALIZED VIEW yetkisinin kullanıcımıza doğrudan verilmesi gerekli.