Oracle User ve Schema nedir?

Oracle User ve Schema nedir ?

Oracle User ve Schema yani kullanıcılar ve şemalar hakkında şu iki cümleyi dikkatle okuyun. Oracle’in bakış açısına göre bir veritabanı kullanıcısı (user) veritabanına login olan bir bireydir. Bir Şema ise veritabanındaki bir kullanıcının sahipliğini yaptığı tüm nesnelerdir (table,view,procedures).

Bu iki terim birbiri için de söylenebilir. Yani kullanıcılar ve şemalar arasında bire bir ilişki vardır. Bir kullanıcı bir şema,bir şema ise bir kullanıcı da diyebiliriz. Mesela CREATE SCHEMA komutu aslında bir şema oluşturmaz. Bu yalnızca şema içerisinde nesneler oluşturmanın kolay bir yoludur. CREATE USER komutu kullandığımızda ilk olarak boş bir şema oluşturulur. İçinde nesneler olmayan bir şema. Oracle User ve Schema yazımızı dikkatle takip edin, pes etmeyin 🙂 



Şemalar nesneleri içerisinde barındırır. Bu nesneler tablo veya PLSQL stored prosedürler gibi veri tutan nesneler olabilir. Bir kullanıcı bu nesnelere ulaşabilmek için kullanıcı adı ve parolalarını yazıp veritabanına giriş yaparlar. Varsayılan olarak ,bir kullanıcı yalnızca kendi şemalarındaki nesnelere erişme izinlerine sahiptir.

Fakat birçok uygulama bu izinleri değiştirir,kendi kurgusuna uyarlar. HR şemasını kullanan bir Ahmet kullanıcısı düşünün. Ahmet burada HR kullanıcısının sahip olduğu hr şemasının içerisindeki tablo veya view gibi nesneleri kullanabilir (eğer izni var ise). Yani bir şema diğer kullanıcıların kullanabileceği verileri içermek için kullanılabilir. Ahmet kullanıcısının HR şeması içerisindeki nesneleri kullanabildiği gibi. Tabiki eğer Ahmet’in bu nesneleri kullanmaya izni HR kullanıcısı tarafından verilmiş ise…

 



Peki ya pratikte nasıl ?

 

Pratikte yalnızca birkaç kullanıcı kendi şemalarında nesneler barındırır ve hatta kendi şemasındaki nesneleri oluşturabilir. Kullanıcıların yalnızca başka şemalardaki nesnelere veya verilere erişim izni olacaktır. Bu nesneler uygulamayı çalıştıran tüm kullanıcılar tarafından kullanılacaktır. Aslında veriyi tutan şemaların sahibi olan kullanıcılar hiçbir zaman login yapmayacaklardır.

Mesela HR şemasını Uğur, Aytekin ve Eyüp kullanıcıları kullanıyor olsun.

HR kullanıcısının şeması tüm verileri barındırır ancak bu 3 kullanıcının zaten HR şema verilerine nesnelerine erişimi var ise neden HR kullanıcısı ile işlem yapalım ki ?

Uğur Aytekin ve Eyüp’e ayrı ayrı yetkiler vererek HR şeması kendini Uğur Aytekin ve Eyüp ün gerçekteki yetkilerine göre ayarlayabilir. Dolayısı ile HR kullanıcısının şemasının tek amacı içerisinde başkaları tarafından kullanılan nesneleri (tablo,m_view,sequence,procedure,function gibi) barındırmak, tutmak olacaktır.

Herhangi bir veri objesinin yani nesnenin (yani table,view,m_view,function,procedure…) bir şemadan bağımsız olarak varolması mümkün değildir. Her tablo, veri, view veya fonksiyonun bir sahibi vardır (owner). Bir başka deyiş ile tablonun veya nesnenin sahibi, tablonun içinde bulunduğu şemanın sahibi olan kullanıcıdır.

Bir nesne eğer HR şeması içerisinde ise sahibi de  HR  kullanıcısıdır. Bir tablonun unique (her tablo için özel bir değer) tanımlayıcısı kullanıcı ismi ve obje ismidir. buna ek olarak aynı şema içerisinde aynı isimde iki tablo bulunamaz. ama aynı isimdeki iki tablo farklı şemaların içerisinde bulunabilir.

Örneğin HR.customers ve AnimalResources.customers. customers tablosu iki farklı şemada bulunabilir. Eğer Ahmet kullanıcısı HR içerisindeki bir tabloya erişmek istiyorsa. Ahmet kullanıcısı login yaptıktan sonra “select * from HR.customers” sqli ile sorgu yapabilir. Görüldüğü gibi “HR” ön eki gerekir. peki Ahmet kullanıcısı HR içerisindeki customers tablosuna “HR” ön eki yazmadan nasıl sorgu yapabilir? O konu SYNONYMS olarak geçiyor ileriki bir zamanda ben de detaylıca öğrenirsem sizinle paylaşacağım. Buraya kadar geldiyseniz siz de benim gibi kafa karışıklığı yaşadığınız bu konuda artık inşAllah önceye göre iyi bir noktadasınız 🙂

 

daha fazla bilgi için…

Diğer Oracle makalelerim için…

Oracle User and Schema
Oracle User and Schema