Makale Özeti

Bu yazımızda SQL Server 2005de kullanıcıların temel yönetimini anlatmanın yanısıra bir hayli geliştirilmiş olarak ortaya çıkan şemalara bir giriş yapıyoruz. Beta 2yi esas alan bu yazının devamında şemalarla ilgili daha detaylı yazıları da Yazılım Güvenliği bölümünde buluyor olacaksınız.

Makale

SQL Server 2005’te kullanıcıları yönetmek ve şemalara giriş

SQL Server 2005te kullanıcıları yönetmek

SQL Server’a erişimi girişlerle sağlarsınız, ama bu size veritabanı seviyesinde erişim sağlamaz. Bunun için hangi veritabanı kullanılacaksa o veritabanında kullanıcılar tanımlamanız gerekir. Kullanıcı oluşturmak için SQL Server Management Studio’daki Object Explorer’ı kullanabilir ya da ilgili veritabanında CREATE USER cümlesini çalıştırabilirsiniz.

Kullanıcıları girişlere eşlemek

Çoğunlukla veritabanı kullanıcıları girişlere eşlenir. Mesela AdventureWorks veritabanında Mustafa adlı bir kullanıcı tanımlayıp bunu ServerAcungil\Mustafa girişinin o veritabanına erişimi için eşleyebilirsiniz. Normalde, sysadmin sunucu sabit rolüne üye olan tüm girişler tüm veritabanlarının dbo kullanıcılarına eşlenirler.
Bazı veritabanı kullanıcıları bir girişe eşlenmeyebilir. Mesela, bir veritabanında guest isminde bir kullanıcı yaratmak, ilgili veritabanına, geçerli bir girişi olan herkesin bir kullanıcısı olmasa da erişmesini sağlar. Diğer eşlenmemiş kullanıcılar arasında sys ve INFORMATION_SCHEMA yer alır.

Object Explorer kullanarak kullanıcı oluşturma

Şu adımları kullanarak yeni bir kullanıcı oluşturabilirsiniz:
1. Sunucuya bağlanın.
2. İlgili sunucunun düğümünü, sonra da Databases düğümünü açın.
3. İçinde kullanıcıyı oluşturmak istediğiniz veritabanının düğümünü açın, sonra da Security düğümünü açın.
4. Users düğümünü sağ tıklayın ve sonra New User’ı tıklayın.
5. Kullanıcıyı eşlemek istediğiniz girişi seçin. Sonra da kullanıcı için bir isim yazın.
6. Kullanıcıyı eklemek istediğiniz veritabanı rollerini belirtin.
7. OK düğmesini tıklayın.

CREATE USER cümlesinin kullanımı

SQL Server veritabanında kullanıcı oluşturmak için CREATE USER cümlesi de kullanılabilir. Bu cümle, daha önceki sürümlerdeki sp_adduser ve sp_grantdbaccess yüklü sistem yordamlarının yerini alır. Bu yüklü yordamlar 2005 versiyonunda geriye dönük destek için bulundurulmaktadır ve sonraki bir sürümde kaldırılacaklardır.
CREATE USER cümlesinin sözdizimi şöyledir:

CREATE USER user_name
    [ FOR {LOGIN login_name
        | CERTIFICATE cert_name
        | ASYMMETRIC KEY asym_key_name
                }
    ]
    [ WITH DEFAULT_SCHEMA = schema_name ]

CREATE USER cümlesinin ana parametreleri şöyledir:
 

Parametre   Tarif
user_name   Yeni kullanıcının ismi
login_name   Bu kullanıcıya eşlenecek girişin ismi. Bu parametre kullanılmazsa:
   • SQL Server user_name parametresinde belirtilen isme sahip bir giriş bulmaya çalışır.
   • Bu şekilde bir giriş bulunamazsa, ve user_name guest ise (ve guest kullanıcısı daha önce tanımlanmamışsa) bir guest kullanıcısı oluşturulur.
   • Eğer user_name guest değilse ve aynı isimde bir giriş bulunamazsa, cümle hata döndürür.
schema_name   Nesne isim çözümlemesi için bu kullanıcı için normalde kullanılacak şema ismi.

Kullanıcıyı değiştirmek

Bir kullanıcının özelliklerini değiştirmek için Object Explorer’dan özelliklerine erişebilir ya da ALTER USER cümlesini çalıştırabilirsiniz.

Kullanıcıyı silmek

Bir kullanıcıyı silmek için onu Object Explorer’da silebilir ya da DROP USER cümlesi kullanabilirsiniz. Nesnelere sahip olan bir kullanıcı silinemez, bu yüzden öncelikle sahip olduğu nesnelerin sahipliğini devretmeniz gerekir. (Ya da onları da silmeniz gerekir.)
DROP USER cümlesi, daha önceki sürümlerdeki sp_dropuser ve sp_revokedbaccess yüklü sistem yordamlarının yerini alır. Bu yüklü yordamlar 2005 versiyonunda geriye dönük destek için bulundurulmaktadır ve sonraki bir sürümde kaldırılacaklardır.

Şema ne demektir?

Veritabanındaki tablolar, görünümler (views) ve yüklü yordamlar gibi nesneler bir şema içinde oluşturulur. SQL Server’ın önceki versiyonlarında şema ve kullanıcı kavramları birbirlerinin yerine geçebilir şekilde kullanılırken 2005’le birlikte bunlar birbirinden tamamen ayrılmıştır. Artık kullanıcı kullanıcı, şema da şemadır. İkisi tamamen farklı amaçlarla kullanılır. Bu sebeple, SQL Server 2005’de uygulama geliştirmeye başlarken, şemaların ne olduğunu ve nasıl kullanıldığını bilmek gerekir.

Tanım

Bir şema, veritabanı nesneleri için bir isim alanıdır. Veritabanındaki bir nesnenin tam olarak belirtilmiş ismi dört kısımdan oluşur: Sunucu.veritabanı.şema.nesne. Tek bir veritabanının içinde bunu şema.nesne şeklinde düşünebiliriz. Önceki versiyonlarda bu isimlendirme standardında nesnenin sahibinin kullanıcı adı etkindi. SQL Server 2005’te şemalar nesne sahipliğinden tamamen ayrılmıştır. Bunun sağladığı ne gibi faydalar vardır?

- Veritabanı nesnelerini isim alanlarında gruplandırırken daha fazla esnekliğe sahip olursunuz. Nesne sahipliğinden bağımsız olarak bu gruplamayı yapma şansınız vardır.

- İzinlerin yönetimi kolaylaşmıştır. Tek tek nesneler yanı sıra şema seviyesinde de izinler verilebilir.

- Yönetilebilirlik gelişmiştir. Bir kullanıcının silinebilmesi için sahibi olduğu nesnelerin yeniden isimlendirilmesi gibi bir zorunluluk yoktur. Şemalar, kullanıcılardan bağımsız olarak düşünülebilir.

Aslında daha net olarak ifade edecek olursak: Şema kavramı isim olarak önceki versiyonlarda bulunmakla birlikte işlevsel bir anlama sahip değildi. Bu versiyonla birlikte şema kavramı sadece isim olarak değil çok gelişmiş işlevlerle kullanıma sunulmuştur.

Şema örneği

AdventureWorks veritabanı (SQL Server 2005’teki örnek veritabanı) veritabanı nesnelerini isim alanlarına gruplamada aşağıdaki şemaları kullanır:
- HumanResources (İnsanKaynakları)
- Person (Kişi)
- Production (Üretim)
- Purchasing (SatınAlma)
- Sales (Satış)
Mesela HumanResources şemasındaki Employee tablosunu anarken HumanResources.Employee şeklinde kullanırsınız.
Görüldüğü üzere, şemalar kullanıcı isimlerinden bağımsız olarak düşünülebildiğinden daha anlamlı bir gruplandırma yapma şansı oluşmuştur.

dbo şeması

Tüm veritabanları bir dbo isimli şema içerir. dbo şeması kendileri için özel olarak bir şema belirtilmemiş tüm kullanıcılar için geçerli şemadır.