SQL Server CONTAINED DATABASE

Reading Time: 3 minutes

SQL Server 2012 ile hayatımıza giren bir özellik olup , Contained Database ile DB Engine ‘den izole edilmiş bir database oluşturulabilir ve Instance ‘lar arası sıkıntısız bir şekilde taşıma işlemi gerçekleştirmemize olanak sağlamaktadır.

Örneğin bir sistem üzerinden aldığımız bir DB Backup ‘ını diğer bir makine de döndüğümüzde kullanıcıların gelmediğini görmekteyizveya kullanıcılar orphaned olarak kalır ve bu yüzden ektra işlemler yapmamız gerecek pozisyonlar doğar.

Contained Database ‘de ise tanımlanan tüm obje ‘lerin metadata bilgilerini kendi üzerinde tutar. Örneğimiz üzerinden gidecek olur isek , bu tip DB ‘lerde Login ‘ler DB Engine Level ‘ında Authenticate olmazlar. User bilgileri DB içerisinde saklanır. Bu şekilde DB Engine ‘den ayrı tutulmuş DB ‘ler Server ‘lar arası daha rahat taşınarak bizim müdahale alanımızı daraltmış olurlar.

Contained Database ‘e verdiğimiz örneği daha detaylı ele alacak olur isek , Önceden SQL Server ‘da kullanıcıların hem Instance düzeyinde (Login)  hem de  veritabanı düzeyinde (User) yaratıldığından ve yetkilendirildiğini bilmekteyiz.  Bunu göz önüne alarak bir kullanıcının SQL Server üzerinde yer alan veritabanına bağlanıp işlem yapabilmesi için , öncelikle SQL Server üzeirnde ‘ki Login ‘i ile SQL Server Instance ‘ına bağlanabilmesi  ve bu Login ‘ine bağlanmış olan User ‘ı ile de veritabanına bağlanıp işlem yapabilmesi gerekiyordu.

Contained Database ‘lerde ise Login ‘e gerek kalmadan, Instance düzeyinde bir yetki denetimine tabi olunmadan doğrudan  Database User ‘ı ile de veritabanına bağlanıp işlemler yapılabiliyor.

Özet olarak ; Contained Database’ler SQL Server Instance’ına bağımlı kalmadan, kendi kullanıcılarını (Login’lerini barındıran) ve bu sayede bir High Availibility yöntemiyle veya elle başka bir SQL Server Instance’ına taşındığında Login Mapping işleriyle uğraşmadan hemen kullanılabilecek veritabanlarıdır.

7

 

Contained Database Oluşturma

Yukarıda normal Database oluşturma script ‘imize ek olarak    parametresinin eklendiğini görmektesiniz. Fakat bu Contained DB ‘yi oluşturmamız için ilk önce ınstance üzerinde Contained DB ‘lere izin vermemiz gerekmektedir. Bunu iki yöntem ile yapabilirsiniz. Brincisi T-SQL ile diğeri ise SSMS üzerinden .

T-SQL ;

SSMS;

Instance üzerine gelip sağ tıklayıp açılan pencerede Proparties sekmesine tıkladıktan sonra ,

1

 

Açılan pencerede Select a Palge bölümünde Advanced sekmesine tıkladıktan sonra Containment bölümünden Enable Contained Databases alanını False ‘dan True ‘ya çekip OK  butonuna basınız.

2

 

Bu şekilde Instance üzerinde Contained Database ‘i aktif hale getirdikten sonra veritabanımızı oluşturabiliriz.

 

Contained Database User Oluşturma

Contained Database’lerde user oluşturma ekranında diğer veritabanlarından farklı olarak SQL User with password seçeneği bulunmaktadır. Bu seçenek vasıtasıyla database engine’den bağımsız ve authentication’ı veritabanının yapacağı bir user oluşturmuş oluruz.

3

T-SQL ;

User ‘larımızı bu şekilde oluşturduktan sonra Connect olmayı deniyoruz. Connect  To Server kısmında SQL Server Authentication ‘ı seçip User ve Password bilgimizi giriyoruz.

4

 

 

Bu işlemlerden sonra ,Contained Database User’lar database engine seviyesinde değil veritabanı seviyesinde tanımlanırlar dedik. Yani bu user’lar sadece tanımlandıkları veritabanına bağlantı kurabilirler. Dolayısıyla SSMS ile bağlantı kurarken Connect To Databas ekısmında ilgili veritabanının seçilmesi gerekmektedir yoksa bağlantı kurulamaz. Bu yüzen Options sekmesine tıklayıp Connect to database bölümüne oluştruduğumuz Contained Database ismini giriyoruz ve Connect diyoruz.

5

 

Connect dedikten sonra aşağıda ki ekran görüntüsündede gördüğünüz üzere bağlantıyı sadece bu kullanıcı ile Test_Contained database ‘i üzerine yapmış olduk.

6

 

Leave a Reply

Your email address will not be published. Required fields are marked *