MS Sql'de with encryption & with schemabinding & with check option kavramları
22 Aralık 2016 Perşembe
WITH ENCRYPTION
View, trigger, stored procedure, fonksiyon gibi yapıların içeriğinin görünür olmasını engellemek için geliştirilmiştir. Bir nevi güvenlik sebebiyle şifrelemek için kullanılır. İlgili nesne veritabanında oluşturulduktan sonra gerek sp_helptext gibi sistem prosedürü gerekse de grafik arayüzünden ilgili yapının içeriğinin görüntülenmesini engellemek için geliştirilmiştir. AS anahtar sözcüğünden önce tanımlaması yapılır ve bu andan sonrada ilgili nesneye ulaşım kısıtlanmış olur. Örnek kullanım şekline bakacak olursak:
CREATE VIEW vw_Adi
WITH ENCRYPTION
AS
SELECT * FROM tablo_adi
Not: Encryption kullanımı diğer nesnelerlede aynıdır biz örnek gösterimimizi view üzerinden yapmış olduk.
Şifrelemiş olduğum nesnemi tekrar erişilebilir hale getirmek için "WITH ENCRYPTION" cümlesini kaldırıp ilgili nesneyi ALTER yapmamız yeterlidir. Ancak bunun için kaynak kodları bir yerde barındırmakta fayda var..
WITH SCHEMABINDING
Database'de oluşturduğumuz nesnelere(view, fonksiyon, trigger vb.) bağlı tabloların, kolonlarının silinmesi ya da değiştirilmesi ihtimaline karşılık geliştirilmiştir. Şayet bir fonksiyonda kullanılan tabloda değişiklik yapılmak istenirse sistem kullanıcıyı uyararak değişikliğin yapılmasını engelleyecektir. Bu özellik kolonun adının değiştirilmesi(silinmesi de dahil) ya da metadata değişiminin önüne geçilmesi amacıyla tasarlanmıştır. Bu değişimlerin dışında kolonlara her türlü DML(insert, update, delete) işlemi uygulanabilir.
Bu yapıyı kullanırken dikkat etmemiz gereken hususlar;
- Hangi kolonları koruma altına almak istiyor isek bunların adlarını yazarak belirtmemiz gerekiyor. Şayet tüm kolonlar için böyle bir ihtiyaç var ise hepsini tek tek yazmamız gerekiyor. (*)(tüm kolonlar anlamına geliyor) işareti ile bunu belirtemiyoruz.
- WITH SCHEMABINDING ile koruma kalkanı oluşturmak istiyor isem kullandığım tabloları dbo(database owner) anahtar sözcüğü ile kullanıyor olmam gerekiyor. Aksi halde ilgili nesnem yaratılamayacaktır zaten. (Bu durum ilgili nesnede kullanılan tüm tablolar için geçerlidir-join işlemlerine vurgu yapıyorum-)
WITH CHECK OPTION
Kimi zaman view nesnelerini tanımlarken nesne gövdesinde WHERE elementi ile kısıtlamaya gidiyor olabilirsiniz. Peşi sıra; bu view nesnesini kullanarak tablolarınıza kayıt işlemi de gerçekleştirebilirsiniz. Şayet bu view nesnesi üzerinden sadece kısıta bağlı kayıt işlemi gerçekleştirecek isek böyle durumda WITH CHECK OPTION nesnesini kullanıyor olmamız gerekir.
Önemli Not1: WITH CHECK OPTION kullanılan nesnede bir transaction çalışır. Şayet ilgili view'de insert edilen satır view'de tanımlanan where koşuluna uyuyor ise insert işlemi başarılı şekilde çalışır aksi durum için yapılan insert işleminde transaction devreye girerek önce "insert" işlemi gerçekleşir sonrasında ise o satır "delete" edilir.
Önemli Not2: WITH CHECK OPTION kullanılan nesne kendisini bağlar, ilgili tabloyu bağlamaz. Yani tabloya bağımsız şekilde istediğiniz gibi kayıt etmeye devam edebilirsiniz.
Örnek kullanım şekli:
CREATE VIEW vw_Adi
AS
SELECT * FROM tablo_adi WHERE kosul
WITH CHECK OPTION
----------------------------------------------------
Her 3 özelliğide aynı nesnede kullanmak istiyor isek şu şekilde bir yazım şekli kullanmamız gerekir.
CREATE VIEW vw_Adi
WITH ENCRYPTION, SCHEMABINDING
AS
SELECT * FROM dbo.tablo_adi WHERE kosul
WITH CHECK OPTION
Bu yazım şekline dikkat edecek olursak; ENCRYPTION ve SCHEMABINDING yerleri değişebilir. Bunun dışında tablo adından önce dbo kullanımına dikkat ediniz. Bu kullanım bize SCHEMABINDING'ın bir dayatmasıdır.
Faydalı bir yazı olması dileğiyle. İyi çalışmalar dilerim hepinize.