Makale Özeti

Bu yazımızda, SQL Server 2005 Beta 2de güvenlikle ilgili konulara devam ediyoruz.

Makale

SQL Server 2005te şemaların yönetimi

Şemaları oluşturmak, değiştirmek ya da yok etmek için SQL Server Management Studio’da yer alan Object Explorer’ı ya da oluşturma, değiştirme, yok etme işlemleri için sırasıyla CREATE SCHEMA, ALTER SCHEMA ve DROP SCHEMA ifadelerini kullanabilirsiniz.

Object Explorer’la bir şema oluşturmak

SQL Server Management Studio’da Object Explorer’ı kullanarak aşağıdaki yöntemle bir şema oluşturabilirsiniz:
1. Şemayı oluşturmak istediğiniz veritabanını içeren sunucuya bağlanın.
2. Bağlandığınız sunucunun düğümünü ve sonra da Databases düğümünü açın.
3. Şemayı oluşturmak istediğiniz veritabanının düğümünü açın ve sonra da Security düğümünü açın.
4. Schemas düğümüne sağ tıklayın ve New Schema’yı tıklayın.
5. Şema için bir isim ve dilerseniz bir de sahip belirtin.
6. OK’yi tıklayın.

CREATE SCHEMA’nın kullanımı

Bir şema oluşturmak için ya da isteğinize bağlı olarak hem şema oluşturmak hem de aynı cümleyle şemada yer alan nesneler de oluşturmak için CREATE SCHEMA ifadesini kullanın. İfadenin sözdizimi şöyledir:

CREATE SCHEMA schema_name_clause
[ < schema_element > [ , ...n ] ]

< schema_name_clause > ::=
{
< schema_name >
| AUTHORIZATION < owner_name >
| < schema_name > AUTHORIZATION < owner_name >
}

< schema_element > ::=
{ table_definition | view_definition | grant_statement
| revoke_statement | deny statement }


İfadede geçen parametrelerin tarifi şöyle verilebilir:

Parametre   Tarif
schema_name   Şemanın ismi.
owner_name   Şemanın sahibi olarak atanacak kullanıcının ismi. Bu parametre boş geçilirse, cümleyi çalıştıran kullanıcı sahip olarak atanır.
table_definition   Şemada bir tablo oluşturmak için kullanılan bir CREATE TABLE ifadesi.
view_definition   Şemada bir görüntü (view) oluşturmak için kullanılan bir CREATE VIEW ifadesi.
grant_statement   Şemadaki bir nesneye yönelik izin vermek için kullanılan bir GRANT ifadesi.
revoke_statement   Yeni şema haricinde herhangi güvenlik ayarı yapılabilir nesneden izin kaldırmak için kullanılan bir REVOKE ifadesi.
deny_statement   Yeni şema haricinde herhangi bir güvenlik ayarı yapılabilir nesneye izin yasaklayan bir DENY ifadesi.

CREATE SCHEMA örneği

CREATE SCHEMA hareketler

CREATE TABLE siparisler
(SiparisID INT, SatisEmaniID INT, SatisTarihi DATETIME)

GRANT SELECT ON siparisler TO Mustafa

GO


Yukarıdaki ifadede hareketler şeması oluşturulurken içinde bir tablo da oluşturulmakta ve o tablo ile ilgili bir izin atanmaktadır.

Bir şemayı değiştirmek

Object Explorer’ı kullanarak ya da ALTER SCHEMA ifadesi ile bir şemada değişiklik yapabilirsiniz. Bunu yapmanız için en sık rastlanan sebep şemanın sahibini değiştirmektir ve şu ifadeyle yapılabilir:

ALTER SCHEMA hareketler AUTHORIZATION Murat

Not: Bir şemanın sahibini değiştirmek o şema ve içindeki nesneler üzerindeki izinlerin tamamını kaldırır.

Bir şemayı kaldırmak

Object Explorer ya da DROP SCHEMA ifadesini kullanabilirsiniz:

DROP SCHEMA hareketler

Not: İçinde nesneler bulunan bir şemayı kaldıramazsınız. Öncelikle içerideki nesnelerin tamamını kaldırmanız gerekir.

Bir kullanıcıya şema nasıl atanır?

Bir veritabanı birden fazla şema içeriyorsa, nesnelerin isim çözümlemesi karışık bir hal alabilir.
Mesela iki farklı şemada, hem hareketler hem dbo’da siparisler isminde ayrı ayrı iki tablo bulunabilir. Veritabanında detaylı isimlerinde bir belirsizlik yoktur: hareketler.siparisler ve dbo.siparisler. Ama sadece tablo isminin siparisler diye kullanıldığı durumlarda beklenmedik sonuçlar doğabilir. Bu tür durumlara önlem olarak, sadece nesne ismi kullanılması durumunda şemanın ne olarak kullanılması gerektiğiyle ilgili atama yapabilirsiniz.

İsim çözümlemesi nasıl çalışır?

Bir ismin çözümlenmesi gerektiğinde SQL Server 2005 şöyle çalışır:
1. Eğer kullanıcının belirtilmiş bir şeması varsa, SQL Server nesneyi bu şemada bulmaya çalışır.
2. Kullanıcının belirtilmiş şemasında nesne bulunamazsa, ya da kullanıcının belirtilmiş bir şeması yoksa, SQL Server nesneyi dbo şemasında bulmaya çalışır.
Mesela normal şeması hareketler olan bir kullanıcı şu Transact-SQL cümlesini çalıştırırsa:

SELECT * FROM siparisler

SQL Server 2005 öncelikle nesne ismini hareketler.siparisler olarak çözümlemeyi dener. hareketler şemasında siparisler isimli bir nesne yoksa, SQL Server ismi bu kez dbo.siparisler olarak çözümlemeyi dener.
Eğer zaten bir şema ismi belirtilmemiş bir kullanıcı bu ifadeyi çalıştırırsa, SQL Server ikinci kerede denemek yerine doğrudan dbo şemasında ismi çözümlemeye çalışır.

Kullanıcıya şema atamak

Bu işlemi Database User properties diyalog kutusundan ya da CREATE USER veya ALTER USER ifadelerinin DEFAULT_SCHEMA parçasında şema ismini belirterek yapabilirsiniz.
Mesela aşağıdaki Transact-SQL kodu, Ali kullanıcısı için hareketler’i doğal şema olarak atıyor:

ALTER USER Ali
WITH DEFAULT_SCHEMA = hareketler